[PATCH 08/20] nvme: call nvme_identify_ns as the first thing in nvme_alloc_ns_block

Damien Le Moal Damien.LeMoal at wdc.com
Mon Sep 28 10:32:04 EDT 2020


On 2020/09/28 21:35, Christoph Hellwig wrote:
> Check if the namespace actually exists as the very first thing and don't
> bother with any extra work if not.  This should speed up and simplify
> the sequential scanning for NVMe 1.0 devices.
> 
> Signed-off-by: Christoph Hellwig <hch at lst.de>
> ---
>  drivers/nvme/host/core.c | 15 +++++++--------
>  1 file changed, 7 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
> index 7b1423c7e7fc58..4a5c4d45755b55 100644
> --- a/drivers/nvme/host/core.c
> +++ b/drivers/nvme/host/core.c
> @@ -3887,9 +3887,12 @@ static void nvme_alloc_ns(struct nvme_ctrl *ctrl, unsigned nsid)
>  	char disk_name[DISK_NAME_LEN];
>  	int node = ctrl->numa_node, flags = GENHD_FL_EXT_DEVT, ret;
>  
> +	if (nvme_identify_ns(ctrl, nsid, &id))
> +		return;
> +
>  	ns = kzalloc_node(sizeof(*ns), GFP_KERNEL, node);
>  	if (!ns)
> -		return;
> +		goto out_free_id;
>  
>  	ns->queue = blk_mq_init_queue(ctrl->tagset);
>  	if (IS_ERR(ns->queue))
> @@ -3911,13 +3914,9 @@ static void nvme_alloc_ns(struct nvme_ctrl *ctrl, unsigned nsid)
>  	blk_queue_logical_block_size(ns->queue, 1 << ns->lba_shift);
>  	nvme_set_queue_limits(ctrl, ns->queue);
>  
> -	ret = nvme_identify_ns(ctrl, nsid, &id);
> -	if (ret)
> -		goto out_free_queue;
> -
>  	ret = nvme_init_ns_head(ns, nsid, id);
>  	if (ret)
> -		goto out_free_id;
> +		goto out_free_queue;
>  	nvme_set_disk_name(disk_name, ns, ctrl, &flags);
>  
>  	disk = alloc_disk_node(0, node);
> @@ -3968,12 +3967,12 @@ static void nvme_alloc_ns(struct nvme_ctrl *ctrl, unsigned nsid)
>  		list_del_init(&ns->head->entry);
>  	mutex_unlock(&ctrl->subsys->lock);
>  	nvme_put_ns_head(ns->head);
> - out_free_id:
> -	kfree(id);
>   out_free_queue:
>  	blk_cleanup_queue(ns->queue);
>   out_free_ns:
>  	kfree(ns);
> + out_free_id:
> +	kfree(id);
>  }
>  
>  static void nvme_ns_remove(struct nvme_ns *ns)
> 

Looks good.

Reviewed-by: Damien Le Moal <damien.lemoal at wdc.com>

-- 
Damien Le Moal
Western Digital Research



More information about the Linux-nvme mailing list