Message ID | 1478843606-15647-1-git-send-email-damien.lemoal@wdc.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Looks fine,
Reviewed-by: Christoph Hellwig <hch@lst.de>
--
To unsubscribe from this list: send the line "unsubscribe linux-block" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
On 11/10/2016 10:53 PM, Damien Le Moal wrote: > Normally, sd_read_capacity sets sdp->use_16_for_rw to 1 based on the > disk capacity so that READ16/WRITE16 are used for large drives. > However, for a zoned disk with RC_BASIS set to 0, the capacity reported > through READ_CAPACITY may be very small, leading to use_16_for_rw not being > set and READ10/WRITE10 commands being used, even after the actual zoned disk > capacity is corrected in sd_zbc_read_zones. This causes LBA offset overflow for > accesses beyond 2TB. > > As the ZBC standard makes it mandatory for ZBC drives to support > the READ16/WRITE16 commands anyway, make sure that use_16_for_rw is set. Added to the 4.10 branch, thanks.
diff --git a/drivers/scsi/sd_zbc.c b/drivers/scsi/sd_zbc.c index 394ab49..92620c8 100644 --- a/drivers/scsi/sd_zbc.c +++ b/drivers/scsi/sd_zbc.c @@ -612,6 +612,10 @@ int sd_zbc_read_zones(struct scsi_disk *sdkp, if (ret) goto err; + /* READ16/WRITE16 is mandatory for ZBC disks */ + sdkp->device->use_16_for_rw = 1; + sdkp->device->use_10_for_rw = 0; + return 0; err:
Normally, sd_read_capacity sets sdp->use_16_for_rw to 1 based on the disk capacity so that READ16/WRITE16 are used for large drives. However, for a zoned disk with RC_BASIS set to 0, the capacity reported through READ_CAPACITY may be very small, leading to use_16_for_rw not being set and READ10/WRITE10 commands being used, even after the actual zoned disk capacity is corrected in sd_zbc_read_zones. This causes LBA offset overflow for accesses beyond 2TB. As the ZBC standard makes it mandatory for ZBC drives to support the READ16/WRITE16 commands anyway, make sure that use_16_for_rw is set. Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com> --- drivers/scsi/sd_zbc.c | 4 ++++ 1 file changed, 4 insertions(+)