nvmet: add passthru ZNS support
authorChaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Tue, 22 Sep 2020 21:17:18 +0000 (14:17 -0700)
committerChristoph Hellwig <hch@lst.de>
Sun, 27 Sep 2020 07:14:19 +0000 (09:14 +0200)
In the default passthru implementation NVMeOF target passthru ctrl is
not capable of handling Zoned Namespaces (ZNS).

Update the nvmet_parse_pasthru_admin_cmd() to allow
NVME_ID_CNS_CS_CTRL/NVME_CIS_ZNS and NVME_ID_CNS_CS_NS/NVME_CIS_ZNS.

With this addition NVMeOF Passthru allows Zoned Namespaces.

Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/target/passthru.c

index e3a5f84..56c5710 100644 (file)
@@ -456,10 +456,26 @@ u16 nvmet_parse_passthru_admin_cmd(struct nvmet_req *req)
                        req->execute = nvmet_passthru_execute_cmd;
                        req->p.use_workqueue = true;
                        return NVME_SC_SUCCESS;
+               case NVME_ID_CNS_CS_CTRL:
+                       switch (req->cmd->identify.csi) {
+                       case NVME_CSI_ZNS:
+                               req->execute = nvmet_passthru_execute_cmd;
+                               req->p.use_workqueue = true;
+                               return NVME_SC_SUCCESS;
+                       }
+                       return NVME_SC_INVALID_OPCODE | NVME_SC_DNR;
                case NVME_ID_CNS_NS:
                        req->execute = nvmet_passthru_execute_cmd;
                        req->p.use_workqueue = true;
                        return NVME_SC_SUCCESS;
+               case NVME_ID_CNS_CS_NS:
+                       switch (req->cmd->identify.csi) {
+                       case NVME_CSI_ZNS:
+                               req->execute = nvmet_passthru_execute_cmd;
+                               req->p.use_workqueue = true;
+                               return NVME_SC_SUCCESS;
+                       }
+                       return NVME_SC_INVALID_OPCODE | NVME_SC_DNR;
                default:
                        return nvmet_setup_passthru_command(req);
                }