[PATCH 1/6] nvme: catch -ENODEV from nvme_revalidate_zones again

Joel Granados j.granados at samsung.com
Thu Jul 21 02:53:49 PDT 2022


On Thu, Jul 21, 2022 at 08:03:15AM +0200, Christoph Hellwig wrote:
> nvme_revalidate_zones can also return -ENODEV if e.g. zone sizes aren't
> constant or not a power of two.  In that case we should jump to marking
> the gendisk hidden and only support pass through.
> 
> Fixes: 602e57c9799c ("nvme: also mark passthrough-only namespaces ready in nvme_update_ns_info")
> Reported-by: Joel Granados <j.granados at samsung.com>
> Signed-off-by: Christoph Hellwig <hch at lst.de>
> ---
>  drivers/nvme/host/core.c | 13 +++++++------
>  1 file changed, 7 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
> index 698e71680e6f3..2e1af9b5c8a91 100644
> --- a/drivers/nvme/host/core.c
> +++ b/drivers/nvme/host/core.c
> @@ -1940,8 +1940,10 @@ static int nvme_update_ns_info(struct nvme_ns *ns, struct nvme_id_ns *id)
>  
>  	if (ns->head->ids.csi == NVME_CSI_ZNS) {
>  		ret = nvme_update_zone_info(ns, lbaf);
> -		if (ret)
> -			goto out_unfreeze;
> +		if (ret) {
> +			blk_mq_unfreeze_queue(ns->disk->queue);
> +			goto out;
> +		}
>  	}
>  
>  	set_disk_ro(ns->disk, (id->nsattr & NVME_NS_ATTR_RO) ||
> @@ -1952,7 +1954,7 @@ static int nvme_update_ns_info(struct nvme_ns *ns, struct nvme_id_ns *id)
>  	if (blk_queue_is_zoned(ns->queue)) {
>  		ret = nvme_revalidate_zones(ns);
>  		if (ret && !nvme_first_scan(ns->disk))
> -			return ret;
> +			goto out;
>  	}
>  
>  	if (nvme_ns_head_multipath(ns->head)) {
> @@ -1967,9 +1969,9 @@ static int nvme_update_ns_info(struct nvme_ns *ns, struct nvme_id_ns *id)
>  		disk_update_readahead(ns->head->disk);
>  		blk_mq_unfreeze_queue(ns->head->disk->queue);
>  	}
> -	return 0;
>  
> -out_unfreeze:
> +	ret = 0;
> +out:
>  	/*
>  	 * If probing fails due an unsupported feature, hide the block device,
>  	 * but still allow other access.
> @@ -1979,7 +1981,6 @@ static int nvme_update_ns_info(struct nvme_ns *ns, struct nvme_id_ns *id)
>  		set_bit(NVME_NS_READY, &ns->flags);
>  		ret = 0;
>  	}
> -	blk_mq_unfreeze_queue(ns->disk->queue);
>  	return ret;
>  }
>  
> -- 
> 2.30.2
> 

LGTM.
Reviewed-by: Joel Granados <j.granados at samsung.com>

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-nvme/attachments/20220721/f09c6f0e/attachment.sig>


More information about the Linux-nvme mailing list