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)
committerChristoph Hellwig <hch@lst.de>
Fri, 2 Apr 2021 16:48:28 +0000 (18:48 +0200)
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>
drivers/nvme/target/discovery.c

index 682854e..4845d12 100644 (file)
@@ -178,12 +178,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;
        }
@@ -250,7 +252,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;
        }