[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