[PATCH V2 4/4] nvmet: set right status on error in id-ns handler
From: Chaitanya Kulkarni <hidden>
Date: 2021-01-04 04:52:52
Subsystem:
nvm express target driver, the rest · Maintainers:
Christoph Hellwig, Sagi Grimberg, Chaitanya Kulkarni, Linus Torvalds
The function nvmet_execute_identify_ns() does't set the status if call to nvmet_find_namespace() fails. In that case we set the status of the request to the value return by the nvmet_copy_sgl(). Set the status to NVME_SC_INVALID_NS and adjust the code such that request will have the right status on nvmet_find_namespace() failure. Without this patch :- # nvme id-ns /dev/nvme1 -n 3 NVME Identify Namespace 3: nsze : 0 ncap : 0 nuse : 0 nsfeat : 0 nlbaf : 0 flbas : 0 mc : 0 dpc : 0 dps : 0 nmic : 0 rescap : 0 fpi : 0 dlfeat : 0 nawun : 0 nawupf : 0 nacwu : 0 nabsn : 0 nabo : 0 nabspf : 0 noiob : 0 nvmcap : 0 mssrl : 0 mcl : 0 msrc : 0 nsattr : 0 nvmsetid: 0 anagrpid: 0 endgid : 0 nguid : 00000000000000000000000000000000 eui64 : 0000000000000000 lbaf 0 : ms:0 lbads:0 rp:0 (in use) With this patch-series :- # gitlog -4 3fd4a1736f35 (HEAD -> nvme-5.11) nvmet: set right status on error in id-ns handler 4d8a9ebec05e nvmet: remove extra variable in id-desclist de9e611ac167 nvmet: remove extra variable in identify ns 54165b5c1ca3 nvmet: remove extra variable in smart log nsid # nvme id-ns /dev/nvme1 -n 3 NVMe status: INVALID_NS: The namespace or the format of that namespace is invalid(0xb) Signed-off-by: Chaitanya Kulkarni <redacted> --- drivers/nvme/target/admin-cmd.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/drivers/nvme/target/admin-cmd.c b/drivers/nvme/target/admin-cmd.c
index 955ca5a653fb..220edacfccfb 100644
--- a/drivers/nvme/target/admin-cmd.c
+++ b/drivers/nvme/target/admin-cmd.c@@ -484,8 +484,10 @@ static void nvmet_execute_identify_ns(struct nvmet_req *req) /* 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) + if (!req->ns) { + status = NVME_SC_INVALID_NS; goto done; + } nvmet_ns_revalidate(req->ns);
@@ -538,7 +540,11 @@ static void nvmet_execute_identify_ns(struct nvmet_req *req) if (req->ns->readonly) id->nsattr |= (1 << 0); done: - status = nvmet_copy_to_sgl(req, 0, id, sizeof(*id)); + if (nvmet_copy_to_sgl(req, 0, id, sizeof(*id))) { + if (!status) + status = NVME_SC_SGL_INVALID_DATA | NVME_SC_DNR; + } + kfree(id); out: nvmet_req_complete(req, status);
--
2.22.1
_______________________________________________
Linux-nvme mailing list
Linux-nvme@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-nvme