public inbox for linux-nvme@lists.infradead.org
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@lst.de>
To: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Cc: hch@lst.de, linux-nvme@lists.infradead.org, sagi@grimberg.me
Subject: Re: [PATCH 01/10] nvmet: zeroout id-ns buffer for invalid nsid
Date: Mon, 1 Feb 2021 18:24:38 +0100	[thread overview]
Message-ID: <20210201172438.GB12054@lst.de> (raw)
In-Reply-To: <20210201054138.34324-2-chaitanya.kulkarni@wdc.com>

On Sun, Jan 31, 2021 at 09:41:29PM -0800, Chaitanya Kulkarni wrote:
> According to spec :-
> "5.15.2.7 Identify Namespace data structure for an Allocated Namespace
> ID (CNS 11h) The Identify Namespace data structure (refer to Figure 245)
> is returned to the host for the namespace specified in the Namespace
> Identifier (NSID) field if it is an allocated NSID. If the specified
> namespace is an unallocated NSID then the controller returns a zero
> filled data structure."
> 
> Move call to nvmet_find_namespace() in nvmet_execute_identify_ns()
> above the id-ns buffer allocation since there is no point in allocating
> a buffer if namespace doesn't exist. Call nvmet_zero_sgl() when call to
> nvmet_find_namespace() fails and add an explicit comment to specify the
> reason for zeroing the buffer which is not common for the NVMe commands.
> Remove the done label and we can directly jump to out label from
> nvmet_find_namespace() error case.
> 
> Fixes: bffcd507780e ("nvmet: set right status on error in id-ns handler")
> Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
> ---
>  drivers/nvme/target/admin-cmd.c | 22 ++++++++++++++--------
>  1 file changed, 14 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/nvme/target/admin-cmd.c b/drivers/nvme/target/admin-cmd.c
> index 613a4d8feac1..8cc7bb25d10d 100644
> --- a/drivers/nvme/target/admin-cmd.c
> +++ b/drivers/nvme/target/admin-cmd.c
> @@ -476,19 +476,25 @@ static void nvmet_execute_identify_ns(struct nvmet_req *req)
>  		goto out;
>  	}
>  
> +	req->ns = nvmet_find_namespace(ctrl, req->cmd->identify.nsid);
> +	if (!req->ns) {
> +		status = NVME_SC_INVALID_NS;
> +		/*
> +		 * According to spec : If the specified namespace is
> +		 * an unallocated NSID then the controller returns a zero filled
> +		 * data structure. Also don't override the error status as invalid
> +		 * namespace takes priority over the failed zeroout buffer case.
> +		 */
> +		nvmet_zero_sgl(req, 0, sizeof(*id));
> +		goto out;
> +	}
> +
>  	id = kzalloc(sizeof(*id), GFP_KERNEL);
>  	if (!id) {
>  		status = NVME_SC_INTERNAL;
>  		goto out;
>  	}
>  
> -	/* return an all zeroed buffer if we can't find an active namespace */
> -	req->ns = nvmet_find_namespace(ctrl, req->cmd->identify.nsid);
> -	if (!req->ns) {
> -		status = NVME_SC_INVALID_NS;
> -		goto done;

I think all we need to do is to remove the status assignment here.
While you're patch avoids the memory allocation for this case, it isn't
really the fast path so I'd rather avoid the extra code.

_______________________________________________
Linux-nvme mailing list
Linux-nvme@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-nvme

  reply	other threads:[~2021-02-01 17:24 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-01  5:41 [PATCH 00/10] nvmet: fixes and some cleanups Chaitanya Kulkarni
2021-02-01  5:41 ` [PATCH 01/10] nvmet: zeroout id-ns buffer for invalid nsid Chaitanya Kulkarni
2021-02-01 17:24   ` Christoph Hellwig [this message]
2021-02-02  0:12     ` Chaitanya Kulkarni
2021-02-02  9:38       ` Christoph Hellwig
2021-02-03  4:31         ` Chaitanya Kulkarni
2021-02-01  5:41 ` [PATCH 02/10] nvmet: return uniform error for invalid ns Chaitanya Kulkarni
2021-02-01  5:41 ` [PATCH 03/10] nvmet: set error in nvmet_find_namespace() Chaitanya Kulkarni
2021-02-01 17:27   ` Christoph Hellwig
2021-02-02  0:13     ` Chaitanya Kulkarni
2021-02-01  5:41 ` [PATCH 04/10] nvmet: remove nsid param from nvmet_find_namespace() Chaitanya Kulkarni
2021-02-01 17:28   ` Christoph Hellwig
2021-02-02  0:13     ` Chaitanya Kulkarni
2021-02-01  5:41 ` [PATCH 05/10] nvmet: remove extra variable in is-ns handler Chaitanya Kulkarni
2021-02-01  5:41 ` [PATCH 06/10] nvmet: add helper to report invalid opcode Chaitanya Kulkarni
2021-02-01 17:29   ` Christoph Hellwig
2021-02-02  0:14     ` Chaitanya Kulkarni
2021-02-02  9:39       ` Christoph Hellwig
2021-02-01  5:41 ` [PATCH 07/10] nvmet: use invalid cmd opcode helper Chaitanya Kulkarni
2021-02-01  5:41 ` [PATCH 08/10] " Chaitanya Kulkarni
2021-02-01  5:41 ` [PATCH 09/10] nvmet: use min of device_path and disk len Chaitanya Kulkarni
2021-02-01  5:41 ` [PATCH 10/10] nvme-loop: rename variable to get rid of the warn Chaitanya Kulkarni

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210201172438.GB12054@lst.de \
    --to=hch@lst.de \
    --cc=chaitanya.kulkarni@wdc.com \
    --cc=linux-nvme@lists.infradead.org \
    --cc=sagi@grimberg.me \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox