Re: [PATCH] scsi: sd_zbc: Fix zone information messages

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

 



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: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Damien Le Moal <damien.lemoal@xxxxxxx>
> ---
>  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




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux