scsi: sd: sd_zbc: Use logical blocks as unit when querying zones
When querying zones, track the position in logical blocks instead of in sectors. This change slightly simplifies sd_zbc_report_zones(). Link: https://lore.kernel.org/r/20220421183023.3462291-4-bvanassche@acm.org Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com> Acked-by: Douglas Gilbert <dgilbert@interlog.com> Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com> [ bvanassche: extracted this change from a larger patch ] Signed-off-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Родитель
9a93b9c9d3
Коммит
43af5da09e
|
@ -224,7 +224,7 @@ int sd_zbc_report_zones(struct gendisk *disk, sector_t sector,
|
|||
unsigned int nr_zones, report_zones_cb cb, void *data)
|
||||
{
|
||||
struct scsi_disk *sdkp = scsi_disk(disk);
|
||||
sector_t capacity = logical_to_sectors(sdkp->device, sdkp->capacity);
|
||||
sector_t lba = sectors_to_logical(sdkp->device, sector);
|
||||
unsigned int nr, i;
|
||||
unsigned char *buf;
|
||||
size_t offset, buflen = 0;
|
||||
|
@ -235,7 +235,7 @@ int sd_zbc_report_zones(struct gendisk *disk, sector_t sector,
|
|||
/* Not a zoned device */
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!capacity)
|
||||
if (!sdkp->capacity)
|
||||
/* Device gone or invalid */
|
||||
return -ENODEV;
|
||||
|
||||
|
@ -243,9 +243,8 @@ int sd_zbc_report_zones(struct gendisk *disk, sector_t sector,
|
|||
if (!buf)
|
||||
return -ENOMEM;
|
||||
|
||||
while (zone_idx < nr_zones && sector < capacity) {
|
||||
ret = sd_zbc_do_report_zones(sdkp, buf, buflen,
|
||||
sectors_to_logical(sdkp->device, sector), true);
|
||||
while (zone_idx < nr_zones && lba < sdkp->capacity) {
|
||||
ret = sd_zbc_do_report_zones(sdkp, buf, buflen, lba, true);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
|
@ -263,7 +262,7 @@ int sd_zbc_report_zones(struct gendisk *disk, sector_t sector,
|
|||
zone_idx++;
|
||||
}
|
||||
|
||||
sector += sd_zbc_zone_sectors(sdkp) * i;
|
||||
lba += sdkp->zone_blocks * i;
|
||||
}
|
||||
|
||||
ret = zone_idx;
|
||||
|
|
Загрузка…
Ссылка в новой задаче