forked from Minki/linux
nvmet: set right status on error in id-ns handler
The function nvmet_execute_identify_ns() doesn'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 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 :- feb3b88b501e (HEAD -> nvme-5.11) nvmet: remove extra variable in identify ns 6302aa67210a nvmet: remove extra variable in id-desclist ed57951da453 nvmet: remove extra variable in smart log nsid be384b8c24dc nvmet: set right status on error in id-ns handler NVMe status: INVALID_NS: The namespace or the format of that namespace is invalid(0xb) Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com> Reviewed-by: Sagi Grimberg <sagi@grimberg.me> Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
20d3bb92e8
commit
bffcd50778
@ -487,8 +487,10 @@ static void nvmet_execute_identify_ns(struct nvmet_req *req)
|
|||||||
|
|
||||||
/* return an all zeroed buffer if we can't find an active namespace */
|
/* return an all zeroed buffer if we can't find an active namespace */
|
||||||
ns = nvmet_find_namespace(ctrl, req->cmd->identify.nsid);
|
ns = nvmet_find_namespace(ctrl, req->cmd->identify.nsid);
|
||||||
if (!ns)
|
if (!ns) {
|
||||||
|
status = NVME_SC_INVALID_NS;
|
||||||
goto done;
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
nvmet_ns_revalidate(ns);
|
nvmet_ns_revalidate(ns);
|
||||||
|
|
||||||
@ -541,7 +543,9 @@ static void nvmet_execute_identify_ns(struct nvmet_req *req)
|
|||||||
id->nsattr |= (1 << 0);
|
id->nsattr |= (1 << 0);
|
||||||
nvmet_put_namespace(ns);
|
nvmet_put_namespace(ns);
|
||||||
done:
|
done:
|
||||||
status = nvmet_copy_to_sgl(req, 0, id, sizeof(*id));
|
if (!status)
|
||||||
|
status = nvmet_copy_to_sgl(req, 0, id, sizeof(*id));
|
||||||
|
|
||||||
kfree(id);
|
kfree(id);
|
||||||
out:
|
out:
|
||||||
nvmet_req_complete(req, status);
|
nvmet_req_complete(req, status);
|
||||||
|
Loading…
Reference in New Issue
Block a user