| From 7b17c29dc6c5df22d1434ec3271094169cdd7854 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 15 Mar 2023 19:59:35 +0900 |
| Subject: nvmet: fix Identify Namespace handling |
| |
| From: Damien Le Moal <damien.lemoal@opensource.wdc.com> |
| |
| [ Upstream commit 8c098aa00118c35108f0c19bd3cdc45e11574948 ] |
| |
| The identify command with cns set to NVME_ID_CNS_NS does not directly |
| depend on the command set. The NVMe specifications is rather confusing |
| here as it appears that this command only applies to the NVM command |
| set. However, footnote 8 of Figure 273 in the NVMe 2.0 base |
| specifications clearly state that this command applies to NVM command |
| sets that support logical blocks, that is, NVM and ZNS. Both the NVM and |
| ZNS command set specifications also list this identify as mandatory. |
| |
| The command handling should thus not look at the csi field since it is |
| defined as unused for this command. Given that we do not support the |
| KV command set, simply remove the csi switch-case for that command |
| handling and call directly nvmet_execute_identify_ns() in |
| nvmet_execute_identify(). |
| |
| Fixes: ab5d0b38c047 ("nvmet: add Command Set Identifier support") |
| Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com> |
| Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com> |
| Tested-by: Chaitanya Kulkarni <kch@nvidia.com> |
| Signed-off-by: Christoph Hellwig <hch@lst.de> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/nvme/target/admin-cmd.c | 9 ++------- |
| 1 file changed, 2 insertions(+), 7 deletions(-) |
| |
| diff --git a/drivers/nvme/target/admin-cmd.c b/drivers/nvme/target/admin-cmd.c |
| index 6a54ed6fb1214..e9b4812930711 100644 |
| --- a/drivers/nvme/target/admin-cmd.c |
| +++ b/drivers/nvme/target/admin-cmd.c |
| @@ -692,13 +692,8 @@ static void nvmet_execute_identify(struct nvmet_req *req) |
| |
| switch (req->cmd->identify.cns) { |
| case NVME_ID_CNS_NS: |
| - switch (req->cmd->identify.csi) { |
| - case NVME_CSI_NVM: |
| - return nvmet_execute_identify_ns(req); |
| - default: |
| - break; |
| - } |
| - break; |
| + nvmet_execute_identify_ns(req); |
| + return; |
| case NVME_ID_CNS_CS_NS: |
| if (IS_ENABLED(CONFIG_BLK_DEV_ZONED)) { |
| switch (req->cmd->identify.csi) { |
| -- |
| 2.39.2 |
| |