]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
nvme-cli: don't try to disconnect for ctrl with pcie transport
authorMinwoo Im <minwoo.im.dev@gmail.com>
Thu, 16 May 2019 17:23:49 +0000 (10:23 -0700)
committerKeith Busch <keith.busch@intel.com>
Fri, 24 May 2019 14:44:23 +0000 (08:44 -0600)
If a host system has both pcie and fabrics controllers, the following
nvme-cli disconnect-all command will might not be working because
contrlller with pcie transport does not have delete_controller in sysfs.

root@target:~# nvme list
Node             SN                   Model                                    Namespace Usage                      Format           FW Rev
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1     foo                  QEMU NVMe Ctrl                           1         536.87  MB / 536.87  MB    512   B +  0 B   1.0
/dev/nvme1n1     b92326b9b2323bf0     Linux                                    1         134.22  MB / 134.22  MB    512   B +  0 B   5.1.0-rc
/dev/nvme2n1     65fa04eddd9bbac0     Linux                                    1         134.22  MB / 134.22  MB    512   B +  0 B   5.1.0-rc

root@target:~/nvme-cli.git# nvme disconnect-all
Failed to open /sys/class/nvme/nvme0/delete_controller: No such file or directory

This patch checks the transport type of the controller in iteration.

Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Signed-off-by: Minwoo Im <minwoo.im.dev@gmail.com>
fabrics.c

index 511de06aec97f7b1d4dc51d5cd4abc0ecd043396..733a24b71d8049bb46678857c662a00bb4237152 100644 (file)
--- a/fabrics.c
+++ b/fabrics.c
@@ -1196,6 +1196,8 @@ int disconnect_all(const char *desc, int argc, char **argv)
 
                for (j = 0; j < subsys->nctrls; j++) {
                        struct ctrl_list_item *ctrl = &subsys->ctrls[j];
+                       if (!strcmp(ctrl->transport, "pcie"))
+                               continue;
 
                        ret = disconnect_by_device(ctrl->name);
                        if (ret)