diff mbox series

[v2,3/9] scsi: sd_zbc: Use logical blocks as unit when querying zones

Message ID 20220421183023.3462291-4-bvanassche@acm.org (mailing list archive)
State Accepted
Headers show
Series Support zoned devices with gap zones | expand

Commit Message

Bart Van Assche April 21, 2022, 6:30 p.m. UTC
When querying zones, track the position in logical blocks instead of in
sectors. This change slightly simplifies sd_zbc_report_zones().

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>
---
 drivers/scsi/sd_zbc.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

Comments

Himanshu Madhani April 21, 2022, 8:09 p.m. UTC | #1
> On Apr 21, 2022, at 11:30 AM, Bart Van Assche <bvanassche@acm.org> wrote:
> 
> When querying zones, track the position in logical blocks instead of in
> sectors. This change slightly simplifies sd_zbc_report_zones().
> 
> 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>
> ---
> drivers/scsi/sd_zbc.c | 11 +++++------
> 1 file changed, 5 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/scsi/sd_zbc.c b/drivers/scsi/sd_zbc.c
> index 9ef5ad345185..e76bcbfd0d1c 100644
> --- a/drivers/scsi/sd_zbc.c
> +++ b/drivers/scsi/sd_zbc.c
> @@ -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;

Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>

--
Himanshu Madhani	Oracle Linux Engineering
diff mbox series

Patch

diff --git a/drivers/scsi/sd_zbc.c b/drivers/scsi/sd_zbc.c
index 9ef5ad345185..e76bcbfd0d1c 100644
--- a/drivers/scsi/sd_zbc.c
+++ b/drivers/scsi/sd_zbc.c
@@ -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;