]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
fabrics: Fix already connected test
authorDaniel Wagner <dwagner@suse.de>
Thu, 26 Jan 2023 13:40:08 +0000 (14:40 +0100)
committerDaniel Wagner <dwagner@suse.de>
Thu, 26 Jan 2023 13:40:08 +0000 (14:40 +0100)
The lookup will also return controllers created from discovery.conf
and config.json. These might not yet connected. When the controller has
a device name we assume that we are connected.

Fixes: 07d6b911e081 ("fabrics: Do not attempt to reconnect to already connected ctrls")
Signed-off-by: Daniel Wagner <dwagner@suse.de>
fabrics.c

index 1bb2a0528ad6f07ef6fbead53f974b61817bc538..f5f098b8da15ba65f1e20fecd6d54962c4c1a8ce 100644 (file)
--- a/fabrics.c
+++ b/fabrics.c
@@ -489,6 +489,7 @@ static int __discover(nvme_ctrl_t c, struct nvme_fabrics_config *defcfg,
 
                for (i = 0; i < numrec; i++) {
                        struct nvmf_disc_log_entry *e = &log->entries[i];
+                       nvme_ctrl_t cl;
                        bool discover = false;
                        bool disconnect;
                        nvme_ctrl_t child;
@@ -504,7 +505,8 @@ static int __discover(nvme_ctrl_t c, struct nvme_fabrics_config *defcfg,
                        };
 
                        /* Already connected ? */
-                       if (lookup_ctrl(r, &trcfg))
+                       cl = lookup_ctrl(r, &trcfg);
+                       if (cl && nvme_ctrl_get_name(cl))
                                continue;
 
                        /* Skip connect if the transport types don't match */
@@ -1056,7 +1058,8 @@ int nvmf_connect(const char *desc, int argc, char **argv)
                .trsvcid        = trsvcid,
        };
 
-       if (lookup_ctrl(r, &trcfg)) {
+       c = lookup_ctrl(r, &trcfg);
+       if (c && nvme_ctrl_get_name(c)) {
                fprintf(stderr, "already connected\n");
                errno = EALREADY;
                goto out_free;