From 093a53d45cae3f76f6d2c1bc731016d91d8b2e02 Mon Sep 17 00:00:00 2001 From: Keith Busch Date: Thu, 3 Apr 2025 07:29:26 -0700 Subject: [PATCH] nvme-cli: attach ns to local controller if none specified Assume the user meant to attach the namespace to the controller the command was sent to if the user didn't provide a controller id list. Suggested-by: Nilay Shroff Signed-off-by: Keith Busch Signed-off-by: Daniel Wagner --- Documentation/nvme-attach-ns.txt | 13 +++++++++---- nvme.c | 16 ++++++++++++---- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/Documentation/nvme-attach-ns.txt b/Documentation/nvme-attach-ns.txt index 1d507593..7b544a46 100644 --- a/Documentation/nvme-attach-ns.txt +++ b/Documentation/nvme-attach-ns.txt @@ -29,8 +29,9 @@ OPTIONS -c :: -controllers=:: - The comma separated list of controller identifiers to attach - the namespace too. + The comma separated list of controller identifiers to attach the + namespace too. If no list is provided, the namespace will be attached + to the controller used for this command. -o :: --output-format=:: @@ -43,9 +44,13 @@ OPTIONS EXAMPLES -------- - Attach namespace to the controller: + Attach namespace 2 to the controllers with id 0x21 and 0x22: - # nvme attach-ns /dev/nvme1 -n 0x2 -c 0x21 + # nvme attach-ns /dev/nvme1 -n 0x2 -c 0x21,0x22 + + Attach namespace 3 to nvme0: + + # nvme attach-ns /dev/nvme0 -n 3 NVME ---- diff --git a/nvme.c b/nvme.c index e78a2e6f..0d07e2a5 100644 --- a/nvme.c +++ b/nvme.c @@ -2953,9 +2953,6 @@ static int nvme_attach_ns(int argc, char **argv, int attach, const char *desc, s num = argconfig_parse_comma_sep_array_u16(cfg.cntlist, list, ARRAY_SIZE(list)); - if (!num) - fprintf(stderr, "warning: empty controller-id list will result in no actual change in namespace attachment\n"); - if (num == -1) { nvme_show_error("%s: controller id list is malformed", cmd->name); return -EINVAL; @@ -2965,7 +2962,18 @@ static int nvme_attach_ns(int argc, char **argv, int attach, const char *desc, s if (!cntlist) return -ENOMEM; - nvme_init_ctrl_list(cntlist, num, list); + if (argconfig_parse_seen(opts, "controllers")) { + nvme_init_ctrl_list(cntlist, num, list); + } else { + struct nvme_id_ctrl ctrl = { 0 }; + + if (nvme_cli_identify_ctrl(dev, &ctrl)) { + perror("identify-ctrl"); + return -errno; + } + cntlist->num = cpu_to_le16(1); + cntlist->identifier[0] = ctrl.cntlid; + } if (attach) err = nvme_cli_ns_attach_ctrls(dev, cfg.namespace_id, -- 2.50.1