Commit 7f9d35d2 authored by Damien Le Moal's avatar Damien Le Moal Committed by Jens Axboe

scsi: sd_zbc: Rearrange code

Move the urswrz check out of sd_zbc_read_zones() and into
sd_zbc_read_zoned_characteristics() where that value is obtained (read
from the disk zoned characteristics VPD page). Since this function now
does more than simply reading the VPD page, rename it to
sd_zbc_check_zoned_characteristics().
Also fix the error message displayed when reading that VPD page fails.
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
Acked-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: default avatarDamien Le Moal <damien.lemoal@wdc.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent cdffab7a
...@@ -305,19 +305,19 @@ void sd_zbc_complete(struct scsi_cmnd *cmd, unsigned int good_bytes, ...@@ -305,19 +305,19 @@ void sd_zbc_complete(struct scsi_cmnd *cmd, unsigned int good_bytes,
} }
/** /**
* sd_zbc_read_zoned_characteristics - Read zoned block device characteristics * sd_zbc_check_zoned_characteristics - Check zoned block device characteristics
* @sdkp: Target disk * @sdkp: Target disk
* @buf: Buffer where to store the VPD page data * @buf: Buffer where to store the VPD page data
* *
* Read VPD page B6. * Read VPD page B6, get information and check that reads are unconstrained.
*/ */
static int sd_zbc_read_zoned_characteristics(struct scsi_disk *sdkp, static int sd_zbc_check_zoned_characteristics(struct scsi_disk *sdkp,
unsigned char *buf) unsigned char *buf)
{ {
if (scsi_get_vpd_page(sdkp->device, 0xb6, buf, 64)) { if (scsi_get_vpd_page(sdkp->device, 0xb6, buf, 64)) {
sd_printk(KERN_NOTICE, sdkp, sd_printk(KERN_NOTICE, sdkp,
"Unconstrained-read check failed\n"); "Read zoned characteristics VPD page failed\n");
return -ENODEV; return -ENODEV;
} }
...@@ -335,6 +335,18 @@ static int sd_zbc_read_zoned_characteristics(struct scsi_disk *sdkp, ...@@ -335,6 +335,18 @@ static int sd_zbc_read_zoned_characteristics(struct scsi_disk *sdkp,
sdkp->zones_max_open = get_unaligned_be32(&buf[16]); sdkp->zones_max_open = get_unaligned_be32(&buf[16]);
} }
/*
* Check for unconstrained reads: host-managed devices with
* constrained reads (drives failing read after write pointer)
* are not supported.
*/
if (!sdkp->urswrz) {
if (sdkp->first_scan)
sd_printk(KERN_NOTICE, sdkp,
"constrained reads devices are not supported\n");
return -ENODEV;
}
return 0; return 0;
} }
...@@ -675,24 +687,11 @@ int sd_zbc_read_zones(struct scsi_disk *sdkp, unsigned char *buf) ...@@ -675,24 +687,11 @@ int sd_zbc_read_zones(struct scsi_disk *sdkp, unsigned char *buf)
*/ */
return 0; return 0;
/* Get zoned block device characteristics */ /* Check zoned block device characteristics (unconstrained reads) */
ret = sd_zbc_read_zoned_characteristics(sdkp, buf); ret = sd_zbc_check_zoned_characteristics(sdkp, buf);
if (ret) if (ret)
goto err; goto err;
/*
* Check for unconstrained reads: host-managed devices with
* constrained reads (drives failing read after write pointer)
* are not supported.
*/
if (!sdkp->urswrz) {
if (sdkp->first_scan)
sd_printk(KERN_NOTICE, sdkp,
"constrained reads devices are not supported\n");
ret = -ENODEV;
goto err;
}
/* Check capacity */ /* Check capacity */
ret = sd_zbc_check_capacity(sdkp, buf); ret = sd_zbc_check_capacity(sdkp, buf);
if (ret) if (ret)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment