|
@@ -584,6 +584,7 @@ out:
|
|
}
|
|
}
|
|
|
|
|
|
sdkp->zone_blocks = zone_blocks;
|
|
sdkp->zone_blocks = zone_blocks;
|
|
|
|
+ sdkp->zone_shift = ilog2(zone_blocks);
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
@@ -591,10 +592,13 @@ out:
|
|
static int sd_zbc_setup(struct scsi_disk *sdkp)
|
|
static int sd_zbc_setup(struct scsi_disk *sdkp)
|
|
{
|
|
{
|
|
|
|
|
|
|
|
+ /* READ16/WRITE16 is mandatory for ZBC disks */
|
|
|
|
+ sdkp->device->use_16_for_rw = 1;
|
|
|
|
+ sdkp->device->use_10_for_rw = 0;
|
|
|
|
+
|
|
/* chunk_sectors indicates the zone size */
|
|
/* chunk_sectors indicates the zone size */
|
|
blk_queue_chunk_sectors(sdkp->disk->queue,
|
|
blk_queue_chunk_sectors(sdkp->disk->queue,
|
|
logical_to_sectors(sdkp->device, sdkp->zone_blocks));
|
|
logical_to_sectors(sdkp->device, sdkp->zone_blocks));
|
|
- sdkp->zone_shift = ilog2(sdkp->zone_blocks);
|
|
|
|
sdkp->nr_zones = sdkp->capacity >> sdkp->zone_shift;
|
|
sdkp->nr_zones = sdkp->capacity >> sdkp->zone_shift;
|
|
if (sdkp->capacity & (sdkp->zone_blocks - 1))
|
|
if (sdkp->capacity & (sdkp->zone_blocks - 1))
|
|
sdkp->nr_zones++;
|
|
sdkp->nr_zones++;
|
|
@@ -657,10 +661,6 @@ int sd_zbc_read_zones(struct scsi_disk *sdkp, unsigned char *buf)
|
|
if (ret)
|
|
if (ret)
|
|
goto err;
|
|
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;
|
|
return 0;
|
|
|
|
|
|
err:
|
|
err:
|