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;
                /* Not a zoned device */
                return -EOPNOTSUPP;
 
-       if (!capacity)
+       if (!sdkp->capacity)
                /* Device gone or invalid */
                return -ENODEV;
 
        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;
 
                        zone_idx++;
                }
 
-               sector += sd_zbc_zone_sectors(sdkp) * i;
+               lba += sdkp->zone_blocks * i;
        }
 
        ret = zone_idx;