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>
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)
errno = ENOMEM;
return NULL;
}
+ if (nvme_ctrl_is_discovered(c)) {
+ errno = EAGAIN;
+ return NULL;
+ }
if (e->treq & NVMF_TREQ_DISABLE_SQFLOW)
disable_sqflow = true;
char *traddr;
char *trsvcid;
char *host_traddr;
+ bool discovered;
struct nvme_fabrics_config cfg;
};
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);
*/
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: