[PATCHv4 02/13] nvmet: implement active command set ns list
Matias Bjørling
m at bjorling.me
Fri Nov 8 04:10:50 PST 2024
On 07-11-2024 20:38, Keith Busch wrote:
> From: Keith Busch <kbusch at kernel.org>
>
> This is required for nvme 2.1 for targets that support multiple command
> sets. We support NVM and ZNS, so are required to support this
> identification.
>
> Reviewed-by: Chaitanya Kulkarni <kch at nvidia.com>
> Reviewed-by: Christoph Hellwig <hch at lst.de>
> Signed-off-by: Keith Busch <kbusch at kernel.org>
> ---
> drivers/nvme/target/admin-cmd.c | 9 +++++++--
> include/linux/nvme.h | 1 +
> 2 files changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/nvme/target/admin-cmd.c b/drivers/nvme/target/admin-cmd.c
> index 8d06dba42bcb3..a13242e791c0f 100644
> --- a/drivers/nvme/target/admin-cmd.c
> +++ b/drivers/nvme/target/admin-cmd.c
> @@ -576,7 +576,7 @@ static void nvmet_execute_identify_ns(struct nvmet_req *req)
> nvmet_req_complete(req, status);
> }
>
> -static void nvmet_execute_identify_nslist(struct nvmet_req *req)
> +static void nvmet_execute_identify_nslist(struct nvmet_req *req, bool match_css)
> {
> static const int buf_size = NVME_IDENTIFY_DATA_SIZE;
> struct nvmet_ctrl *ctrl = req->sq->ctrl;
> @@ -606,6 +606,8 @@ static void nvmet_execute_identify_nslist(struct nvmet_req *req)
> xa_for_each(&ctrl->subsys->namespaces, idx, ns) {
> if (ns->nsid <= min_nsid)
> continue;
> + if (match_css && req->ns->csi != req->cmd->identify.csi)
> + continue;
> list[i++] = cpu_to_le32(ns->nsid);
> if (i == buf_size / sizeof(__le32))
> break;
> @@ -712,7 +714,7 @@ static void nvmet_execute_identify(struct nvmet_req *req)
> nvmet_execute_identify_ctrl(req);
> return;
> case NVME_ID_CNS_NS_ACTIVE_LIST:
> - nvmet_execute_identify_nslist(req);
> + nvmet_execute_identify_nslist(req, false);
> return;
> case NVME_ID_CNS_NS_DESC_LIST:
> nvmet_execute_identify_desclist(req);
> @@ -743,6 +745,9 @@ static void nvmet_execute_identify(struct nvmet_req *req)
> break;
> }
> break;
> + case NVME_ID_CNS_NS_ACTIVE_LIST_CS:
> + nvmet_execute_identify_nslist(req, true);
> + return;
> }
>
> pr_debug("unhandled identify cns %d on qid %d\n",
> diff --git a/include/linux/nvme.h b/include/linux/nvme.h
> index b58d9405d65e0..0f263c7e63192 100644
> --- a/include/linux/nvme.h
> +++ b/include/linux/nvme.h
> @@ -522,6 +522,7 @@ enum {
> NVME_ID_CNS_NS_DESC_LIST = 0x03,
> NVME_ID_CNS_CS_NS = 0x05,
> NVME_ID_CNS_CS_CTRL = 0x06,
> + NVME_ID_CNS_NS_ACTIVE_LIST_CS = 0x07,
> NVME_ID_CNS_NS_CS_INDEP = 0x08,
> NVME_ID_CNS_NS_PRESENT_LIST = 0x10,
> NVME_ID_CNS_NS_PRESENT = 0x11,
Looks good.
Reviewed-by: Matias Bjørling <matias.bjorling at wdc.com>
More information about the Linux-nvme
mailing list