nvmet: return proper error code from discovery ctrl
authorHou Pu <houpu.main@gmail.com>
Wed, 31 Mar 2021 06:52:39 +0000 (14:52 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 11 May 2021 12:47:26 +0000 (14:47 +0200)
[ Upstream commit 79695dcd9ad4463a82def7f42960e6d7baa76f0b ]

Return NVME_SC_INVALID_FIELD from discovery controller like normal
controller when executing identify or get log page command.

Signed-off-by: Hou Pu <houpu.main@gmail.com>
Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/nvme/target/discovery.c

index f40c05c..5b8ee82 100644 (file)
@@ -177,12 +177,14 @@ static void nvmet_execute_disc_get_log_page(struct nvmet_req *req)
        if (req->cmd->get_log_page.lid != NVME_LOG_DISC) {
                req->error_loc =
                        offsetof(struct nvme_get_log_page_command, lid);
-               status = NVME_SC_INVALID_OPCODE | NVME_SC_DNR;
+               status = NVME_SC_INVALID_FIELD | NVME_SC_DNR;
                goto out;
        }
 
        /* Spec requires dword aligned offsets */
        if (offset & 0x3) {
+               req->error_loc =
+                       offsetof(struct nvme_get_log_page_command, lpo);
                status = NVME_SC_INVALID_FIELD | NVME_SC_DNR;
                goto out;
        }
@@ -249,7 +251,7 @@ static void nvmet_execute_disc_identify(struct nvmet_req *req)
 
        if (req->cmd->identify.cns != NVME_ID_CNS_CTRL) {
                req->error_loc = offsetof(struct nvme_identify, cns);
-               status = NVME_SC_INVALID_OPCODE | NVME_SC_DNR;
+               status = NVME_SC_INVALID_FIELD | NVME_SC_DNR;
                goto out;
        }