From 0ee68b0c52f8be0deea617d96c47353ad3ed91c1 Mon Sep 17 00:00:00 2001 From: Daniel Wagner Date: Thu, 26 Jan 2023 14:40:08 +0100 Subject: [PATCH] fabrics: Fix already connected test 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 --- fabrics.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/fabrics.c b/fabrics.c index 1bb2a052..f5f098b8 100644 --- 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; -- 2.49.0