Martin,

Any comment on this patch ?

On 2019/01/30 7:55, Damien Le Moal wrote:
> Commit bf5054569653 ("block: Introduce blk_revalidate_disk_zones()")
> inadvertently broke the message output of sd_zbc_print_zones() because
> the zone information initialization of the scsi disk structure was
> moved to the second scan run while sd_zbc_print_zones() is called on
> the first scan. This leads to the following incorrect message to be
> printed for any ZBC or ZAC zoned disks.
> 
> "...[sdX] 4294967295 zones of 0 logical blocks + 1 runt zone"
> 
> Fix this by initializing sdkp zone size and number of zones early on the
> first scan. This does not impact the execution of
> blk_revalidate_zones(). This functions is still called only once the
> block device capacity is set on the second revalidate run on boot, or if
> the disk zone configuration changed (i.e. the disk changed).
> 
> Fixes: bf5054569653 ("block: Introduce blk_revalidate_disk_zones()")
> Cc: [email protected]
> Signed-off-by: Damien Le Moal <[email protected]>
> ---
>  drivers/scsi/sd_zbc.c | 12 ++++++++----
>  1 file changed, 8 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/scsi/sd_zbc.c b/drivers/scsi/sd_zbc.c
> index 83365b29a4d8..fff86940388b 100644
> --- a/drivers/scsi/sd_zbc.c
> +++ b/drivers/scsi/sd_zbc.c
> @@ -462,12 +462,16 @@ int sd_zbc_read_zones(struct scsi_disk *sdkp, unsigned 
> char *buf)
>       sdkp->device->use_10_for_rw = 0;
>  
>       /*
> -      * If something changed, revalidate the disk zone bitmaps once we have
> -      * the capacity, that is on the second revalidate execution during disk
> -      * scan and always during normal revalidate.
> +      * Revalidate the disk zone bitmaps once the block device capacity is
> +      * set on the second revalidate execution during disk scan and if
> +      * something changed when executing a normal revalidate.
>        */
> -     if (sdkp->first_scan)
> +     if (sdkp->first_scan) {
> +             sdkp->zone_blocks = zone_blocks;
> +             sdkp->nr_zones = nr_zones;
>               return 0;
> +     }
> +
>       if (sdkp->zone_blocks != zone_blocks ||
>           sdkp->nr_zones != nr_zones ||
>           disk->queue->nr_zones != nr_zones) {
> 


-- 
Damien Le Moal
Western Digital Research

Reply via email to