[PATCHv2] nvme-cli: attach ns to local controller if none specified

Keith Busch kbusch at meta.com
Thu Apr 3 07:29:26 PDT 2025


From: Keith Busch <kbusch at kernel.org>

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 <nilay at linux.ibm.com>
Signed-off-by: Keith Busch <kbusch at kernel.org>
---
v1->v2:

  Added documentation on this behavior

  Fixed the controller list length

 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 <ctrl-list,>::
 -controllers=<ctrl-list,>::
-	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 <device> controller used for this command.
 
 -o <fmt>::
 --output-format=<fmt>::
@@ -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 bb412843..ad1eb461 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.47.1




More information about the Linux-nvme mailing list