diff options
author | Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com> | 2020-09-22 14:17:18 -0700 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2020-09-27 09:14:19 +0200 |
commit | 5b3356d9da88fe6d6f3bcd8a2336d14a767f377d (patch) | |
tree | c94d913739d91dc407aebd18bd654baaa4638ce5 | |
parent | 4e683c48db018e72e81e1e0d12a5020d29be561a (diff) | |
download | linux-5b3356d9da88fe6d6f3bcd8a2336d14a767f377d.tar.gz linux-5b3356d9da88fe6d6f3bcd8a2336d14a767f377d.tar.bz2 linux-5b3356d9da88fe6d6f3bcd8a2336d14a767f377d.zip |
nvmet: add passthru ZNS support
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>
-rw-r--r-- | drivers/nvme/target/passthru.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/nvme/target/passthru.c b/drivers/nvme/target/passthru.c index e3a5f8499a0b..56c571052216 100644 --- a/drivers/nvme/target/passthru.c +++ b/drivers/nvme/target/passthru.c @@ -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); } |