]> www.infradead.org Git - users/sagi/libnvme.git/commitdiff
tree,fabrics: detect discovery loops
authorHannes Reinecke <hare@suse.de>
Wed, 14 Apr 2021 10:06:36 +0000 (12:06 +0200)
committerHannes Reinecke <hare@suse.de>
Fri, 11 Jun 2021 10:13:20 +0000 (12:13 +0200)
Add an attribute 'discovered' to the controller configuration to
identify discovery referral loops; if the controller is already
discovered we'll skip it for subsequent discovery commands.

Signed-off-by: Hannes Reinecke <hare@suse.de>
src/nvme/fabrics.c
src/nvme/tree.c
src/nvme/tree.h

index c9016ed4077f85f41dd3b1f30bdff0725cd33d5f..7adbc5f52e582cc3184d3d4698639c2eef62f024 100644 (file)
@@ -325,6 +325,7 @@ int nvmf_add_ctrl(nvme_host_t h, nvme_ctrl_t c,
 
        cfg = merge_config(c, cfg);
        nvme_ctrl_disable_sqflow(c, disable_sqflow);
+       nvme_ctrl_set_discovered(c, true);
 
        ret = build_options(c, &argstr);
        if (ret)
@@ -398,6 +399,10 @@ nvme_ctrl_t nvmf_connect_disc_entry(nvme_host_t h,
                errno = ENOMEM;
                return NULL;
        }
+       if (nvme_ctrl_is_discovered(c)) {
+               errno = EAGAIN;
+               return NULL;
+       }
 
        if (e->treq & NVMF_TREQ_DISABLE_SQFLOW)
                disable_sqflow = true;
index 5805b44723888d69cb0bf87dc7ab39da6109f883..663d7af90f567fd7e4c33ee531f6d066793f7ed0 100644 (file)
@@ -105,6 +105,7 @@ struct nvme_ctrl {
        char *traddr;
        char *trsvcid;
        char *host_traddr;
+       bool discovered;
        struct nvme_fabrics_config cfg;
 };
 
@@ -692,6 +693,16 @@ void nvme_ctrl_disable_sqflow(nvme_ctrl_t c, bool disable_sqflow)
        c->cfg.disable_sqflow = disable_sqflow;
 }
 
+void nvme_ctrl_set_discovered(nvme_ctrl_t c, bool discovered)
+{
+       c->discovered = discovered;
+}
+
+bool nvme_ctrl_is_discovered(nvme_ctrl_t c)
+{
+       return c->discovered;
+}
+
 int nvme_ctrl_identify(nvme_ctrl_t c, struct nvme_id_ctrl *id)
 {
        return nvme_identify_ctrl(nvme_ctrl_get_fd(c), id);
index 419bfeba76b5e1625a7a31d7e5bf5a1f034ef45b..3555c768c43ce97266415fe68d18b92e7cd47a78 100644 (file)
@@ -791,6 +791,23 @@ const char *nvme_ctrl_get_host_traddr(nvme_ctrl_t c);
  */
 struct nvme_fabrics_config *nvme_ctrl_get_config(nvme_ctrl_t c);
 
+/**
+ * nvme_ctrl_set_discovered() -
+ * @c:
+ * @discovered:
+ *
+ * Return:
+ */
+void nvme_ctrl_set_discovered(nvme_ctrl_t c, bool discovered);
+
+/**
+ * nvme_ctrl_is_discovered() -
+ * @c:
+ *
+ * Return:
+ */
+bool nvme_ctrl_is_discovered(nvme_ctrl_t c);
+
 /**
  * nvme_ctrl_disable_sqflow() -
  * @c: