[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 02/26] sd: move zone limits setup out of sd_read_block_characteristics



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@xxxxxx>
> ---
>  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




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.