nvmet: add helper to report invalid opcode
authorChaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Wed, 10 Feb 2021 05:47:56 +0000 (21:47 -0800)
committerChristoph Hellwig <hch@lst.de>
Wed, 10 Feb 2021 15:38:05 +0000 (16:38 +0100)
In the NVMeOF block device backend, file backend, and passthru backend
we reject and report the commands if opcode is not handled.

Add an helper and use it in block device backend to keep the code
and error message uniform.

Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/target/core.c
drivers/nvme/target/io-cmd-bdev.c
drivers/nvme/target/nvmet.h

index 95b58d4b1af287834d9975c7550c8dcb486a2e13..35ad96261b8f8e6ac588e62899e744e49c409c1b 100644 (file)
@@ -82,6 +82,15 @@ inline u16 errno_to_nvme_status(struct nvmet_req *req, int errno)
        return status;
 }
 
+u16 nvmet_report_invalid_opcode(struct nvmet_req *req)
+{
+       pr_debug("unhandled cmd %d on qid %d\n", req->cmd->common.opcode,
+                req->sq->qid);
+
+       req->error_loc = offsetof(struct nvme_common_command, opcode);
+       return NVME_SC_INVALID_OPCODE | NVME_SC_DNR;
+}
+
 static struct nvmet_subsys *nvmet_find_get_subsys(struct nvmet_port *port,
                const char *subsysnqn);
 
index 23095bdfce06c1b014e00e00265418f46c8a6b70..105ef2b125cfeaa296c8d6f411e79577479fe8a4 100644 (file)
@@ -449,9 +449,6 @@ u16 nvmet_bdev_parse_io_cmd(struct nvmet_req *req)
                req->execute = nvmet_bdev_execute_write_zeroes;
                return 0;
        default:
-               pr_err("unhandled cmd %d on qid %d\n", cmd->common.opcode,
-                      req->sq->qid);
-               req->error_loc = offsetof(struct nvme_common_command, opcode);
-               return NVME_SC_INVALID_OPCODE | NVME_SC_DNR;
+               return nvmet_report_invalid_opcode(req);
        }
 }
index 954b3d8451f550f64847a0363a94be8eef88368e..00f78e41d8c85e77fed2c1ae01120eeead63d551 100644 (file)
@@ -589,6 +589,7 @@ nvmet_req_passthru_ctrl(struct nvmet_req *req)
 }
 
 u16 errno_to_nvme_status(struct nvmet_req *req, int errno);
+u16 nvmet_report_invalid_opcode(struct nvmet_req *req);
 
 /* Convert a 32-bit number to a 16-bit 0's based number */
 static inline __le16 to0based(u32 a)