Deleted Added
full compact
43c43
< __FBSDID("$FreeBSD: head/sys/cam/ctl/ctl_backend_block.c 275568 2014-12-06 20:39:25Z mav $");
---
> __FBSDID("$FreeBSD: head/sys/cam/ctl/ctl_backend_block.c 275865 2014-12-17 17:30:54Z mav $");
175a176,177
> uint16_t ublockexp;
> uint16_t ublockoff;
1741a1744
> char *value;
1743c1746
< off_t pss;
---
> off_t ps, pss, po, pos, us, uss, uo, uos;
1803,1805c1806,1819
< pss = vattr.va_blocksize / be_lun->blocksize;
< if ((pss > 0) && (pss * be_lun->blocksize == vattr.va_blocksize) &&
< ((pss & (pss - 1)) == 0)) {
---
>
> us = ps = vattr.va_blocksize;
> uo = po = 0;
>
> value = ctl_get_opt(&be_lun->ctl_be_lun.options, "pblocksize");
> if (value != NULL)
> ctl_expand_number(value, &ps);
> value = ctl_get_opt(&be_lun->ctl_be_lun.options, "pblockoffset");
> if (value != NULL)
> ctl_expand_number(value, &po);
> pss = ps / be_lun->blocksize;
> pos = po / be_lun->blocksize;
> if ((pss > 0) && (pss * be_lun->blocksize == ps) && (pss >= pos) &&
> ((pss & (pss - 1)) == 0) && (pos * be_lun->blocksize == po)) {
1807c1821
< be_lun->pblockoff = 0;
---
> be_lun->pblockoff = (pss - pos) % pss;
1809a1824,1837
> value = ctl_get_opt(&be_lun->ctl_be_lun.options, "ublocksize");
> if (value != NULL)
> ctl_expand_number(value, &us);
> value = ctl_get_opt(&be_lun->ctl_be_lun.options, "ublockoffset");
> if (value != NULL)
> ctl_expand_number(value, &uo);
> uss = us / be_lun->blocksize;
> uos = uo / be_lun->blocksize;
> if ((uss > 0) && (uss * be_lun->blocksize == us) && (uss >= uos) &&
> ((uss & (uss - 1)) == 0) && (uos * be_lun->blocksize == uo)) {
> be_lun->ublockexp = fls(uss) - 1;
> be_lun->ublockoff = (uss - uos) % uss;
> }
>
1829a1858
> char *value;
1831c1860
< off_t ps, pss, po, pos;
---
> off_t ps, pss, po, pos, us, uss, uo, uos;
1944a1974,1982
> us = ps;
> uo = po;
>
> value = ctl_get_opt(&be_lun->ctl_be_lun.options, "pblocksize");
> if (value != NULL)
> ctl_expand_number(value, &ps);
> value = ctl_get_opt(&be_lun->ctl_be_lun.options, "pblockoffset");
> if (value != NULL)
> ctl_expand_number(value, &po);
1952a1991,2004
> value = ctl_get_opt(&be_lun->ctl_be_lun.options, "ublocksize");
> if (value != NULL)
> ctl_expand_number(value, &us);
> value = ctl_get_opt(&be_lun->ctl_be_lun.options, "ublockoffset");
> if (value != NULL)
> ctl_expand_number(value, &uo);
> uss = us / be_lun->blocksize;
> uos = uo / be_lun->blocksize;
> if ((uss > 0) && (uss * be_lun->blocksize == us) && (uss >= uos) &&
> ((uss & (uss - 1)) == 0) && (uos * be_lun->blocksize == uo)) {
> be_lun->ublockexp = fls(uss) - 1;
> be_lun->ublockoff = (uss - uos) % uss;
> }
>
2164a2217,2218
> be_lun->ublockexp = 0;
> be_lun->ublockoff = 0;
2214a2269,2270
> be_lun->ctl_be_lun.ublockexp = be_lun->ublockexp;
> be_lun->ctl_be_lun.ublockoff = be_lun->ublockoff;
2593a2650,2651
> be_lun->ctl_be_lun.ublockexp = be_lun->ublockexp;
> be_lun->ctl_be_lun.ublockoff = be_lun->ublockoff;