[PATCH 02/26] sd: move zone limits setup out of sd_read_block_characteristics
Damien Le Moal
dlemoal at kernel.org
Mon Jun 10 22:51:24 PDT 2024
On 6/11/24 2:19 PM, Christoph Hellwig wrote:
> Move a bit of code that sets up the zone flag and the write granularity
> into sd_zbc_read_zones to be with the rest of the zoned limits.
>
> Signed-off-by: Christoph Hellwig <hch at lst.de>
> ---
> drivers/scsi/sd.c | 21 +--------------------
> drivers/scsi/sd_zbc.c | 13 ++++++++++++-
> 2 files changed, 13 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
> index 85b45345a27739..5bfed61c70db8f 100644
> --- a/drivers/scsi/sd.c
> +++ b/drivers/scsi/sd.c
> @@ -3308,29 +3308,10 @@ static void sd_read_block_characteristics(struct scsi_disk *sdkp,
> blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, q);
> }
>
> -
> -#ifdef CONFIG_BLK_DEV_ZONED /* sd_probe rejects ZBD devices early otherwise */
> - if (sdkp->device->type == TYPE_ZBC) {
> - lim->zoned = true;
> -
> - /*
> - * Per ZBC and ZAC specifications, writes in sequential write
> - * required zones of host-managed devices must be aligned to
> - * the device physical block size.
> - */
> - lim->zone_write_granularity = sdkp->physical_block_size;
> - } else {
> - /*
> - * Host-aware devices are treated as conventional.
> - */
> - lim->zoned = false;
> - }
> -#endif /* CONFIG_BLK_DEV_ZONED */
> -
> if (!sdkp->first_scan)
> return;
>
> - if (lim->zoned)
> + if (sdkp->device->type == TYPE_ZBC)
Nit: use sd_is_zoned() here ?
> sd_printk(KERN_NOTICE, sdkp, "Host-managed zoned block device\n");
> else if (sdkp->zoned == 1)
> sd_printk(KERN_NOTICE, sdkp, "Host-aware SMR disk used as regular disk\n");
> diff --git a/drivers/scsi/sd_zbc.c b/drivers/scsi/sd_zbc.c
> index 422eaed8457227..e9501db0450be3 100644
> --- a/drivers/scsi/sd_zbc.c
> +++ b/drivers/scsi/sd_zbc.c
> @@ -598,8 +598,19 @@ int sd_zbc_read_zones(struct scsi_disk *sdkp, struct queue_limits *lim,
> u32 zone_blocks = 0;
> int ret;
>
> - if (!sd_is_zoned(sdkp))
> + if (!sd_is_zoned(sdkp)) {
> + lim->zoned = false;
Maybe we should clear the other zone related limits here ? If the drive is
reformatted/converted from SMR to CMR (FORMAT WITH PRESET), the other zone
limits may be set already, no ?
> return 0;
> + }
> +
> + lim->zoned = true;
> +
> + /*
> + * Per ZBC and ZAC specifications, writes in sequential write required
> + * zones of host-managed devices must be aligned to the device physical
> + * block size.
> + */
> + lim->zone_write_granularity = sdkp->physical_block_size;
>
> /* READ16/WRITE16/SYNC16 is mandatory for ZBC devices */
> sdkp->device->use_16_for_rw = 1;
--
Damien Le Moal
Western Digital Research
More information about the Linux-nvme
mailing list