From b3b9963396c5bb7cd16c24db5e338e88d064d8e8 Mon Sep 17 00:00:00 2001 From: Daniel Wagner Date: Fri, 5 Jul 2024 14:35:30 +0200 Subject: [PATCH] fabrics: refactore discover from json config Move the connect logic out of the subsystem, ctrl loop. Too much indention. Signed-off-by: Daniel Wagner --- fabrics.c | 147 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 81 insertions(+), 66 deletions(-) diff --git a/fabrics.c b/fabrics.c index d42bdc19..db5cc97d 100644 --- a/fabrics.c +++ b/fabrics.c @@ -502,91 +502,106 @@ next: return ret; } -static int discover_from_json_config_file(nvme_root_t r, nvme_host_t h, - const char *desc, bool connect, +static int _discover_from_json_config_file(nvme_root_t r, nvme_host_t h, nvme_subsystem_t s, + nvme_ctrl_t c, const char *desc, bool connect, const struct nvme_fabrics_config *defcfg, nvme_print_flags_t flags, bool force) { - const char *transport, *traddr, *host_traddr, *host_iface, *trsvcid, *subsysnqn; - nvme_subsystem_t s; - nvme_ctrl_t c, cn; + const char *transport, *traddr, *host_traddr; + const char *host_iface, *trsvcid, *subsysnqn; struct nvme_fabrics_config cfg; + nvme_ctrl_t cn; int ret = 0; - nvme_for_each_subsystem(h, s) { - nvme_subsystem_for_each_ctrl(s, c) { - transport = nvme_ctrl_get_transport(c); - traddr = nvme_ctrl_get_traddr(c); - host_traddr = nvme_ctrl_get_host_traddr(c); - host_iface = nvme_ctrl_get_host_iface(c); + transport = nvme_ctrl_get_transport(c); + traddr = nvme_ctrl_get_traddr(c); + host_traddr = nvme_ctrl_get_host_traddr(c); + host_iface = nvme_ctrl_get_host_iface(c); + + if (!transport && !traddr) + return 0; + + /* ignore none fabric transports */ + if (strcmp(transport, "tcp") && + strcmp(transport, "rdma") && + strcmp(transport, "fc")) + return 0; + + /* ignore if no host_traddr for fc */ + if (!strcmp(transport, "fc")) { + if (!host_traddr) { + fprintf(stderr, "host_traddr required for fc\n"); + return 0; + } + } - if (!transport && !traddr) - continue; + /* ignore if host_iface set for any transport other than tcp */ + if (!strcmp(transport, "rdma") || !strcmp(transport, "fc")) { + if (host_iface) { + fprintf(stderr, + "host_iface not permitted for rdma or fc\n"); + return 0; + } + } - /* ignore none fabric transports */ - if (strcmp(transport, "tcp") && - strcmp(transport, "rdma") && - strcmp(transport, "fc")) - continue; + trsvcid = nvme_ctrl_get_trsvcid(c); + if (!trsvcid || !strcmp(trsvcid, "")) + trsvcid = nvmf_get_default_trsvcid(transport, true); - /* ignore if no host_traddr for fc */ - if (!strcmp(transport, "fc")) { - if (!host_traddr) { - fprintf(stderr, "host_traddr required for fc\n"); - continue; - } - } + if (force) + subsysnqn = nvme_ctrl_get_subsysnqn(c); + else + subsysnqn = NVME_DISC_SUBSYS_NAME; - /* ignore if host_iface set for any transport other than tcp */ - if (!strcmp(transport, "rdma") || !strcmp(transport, "fc")) { - if (host_iface) { - fprintf(stderr, "host_iface not permitted for rdma or fc\n"); - continue; - } - } + if (nvme_ctrl_is_persistent(c)) + persistent = true; - trsvcid = nvme_ctrl_get_trsvcid(c); - if (!trsvcid || !strcmp(trsvcid, "")) - trsvcid = nvmf_get_default_trsvcid(transport, - true); + memcpy(&cfg, defcfg, sizeof(cfg)); - if (force) - subsysnqn = nvme_ctrl_get_subsysnqn(c); - else - subsysnqn = NVME_DISC_SUBSYS_NAME; + struct tr_config trcfg = { + .subsysnqn = subsysnqn, + .transport = transport, + .traddr = traddr, + .host_traddr = host_traddr, + .host_iface = host_iface, + .trsvcid = trsvcid, + }; - if (nvme_ctrl_is_persistent(c)) - persistent = true; + if (!force) { + cn = lookup_ctrl(h, &trcfg); + if (cn) { + __discover(cn, &cfg, raw, connect, true, flags); + return 0; + } + } - memcpy(&cfg, defcfg, sizeof(cfg)); + cn = nvmf_create_discover_ctrl(r, h, &cfg, &trcfg); + if (!cn) + return 0; - struct tr_config trcfg = { - .subsysnqn = subsysnqn, - .transport = transport, - .traddr = traddr, - .host_traddr = host_traddr, - .host_iface = host_iface, - .trsvcid = trsvcid, - }; + __discover(cn, &cfg, raw, connect, persistent, flags); + if (!(persistent || is_persistent_discovery_ctrl(h, cn))) + ret = nvme_disconnect_ctrl(cn); + nvme_free_ctrl(cn); - if (!force) { - cn = lookup_ctrl(h, &trcfg); - if (cn) { - __discover(cn, &cfg, raw, connect, - true, flags); - continue; - } - } + return ret; +} - cn = nvmf_create_discover_ctrl(r, h, &cfg, &trcfg); - if (!cn) - continue; +static int discover_from_json_config_file(nvme_root_t r, nvme_host_t h, + const char *desc, bool connect, + const struct nvme_fabrics_config *defcfg, + nvme_print_flags_t flags, + bool force) +{ + nvme_subsystem_t s; + nvme_ctrl_t c; + int ret = 0; - __discover(cn, &cfg, raw, connect, persistent, flags); - if (!(persistent || is_persistent_discovery_ctrl(h, cn))) - ret = nvme_disconnect_ctrl(cn); - nvme_free_ctrl(cn); + nvme_for_each_subsystem(h, s) { + nvme_subsystem_for_each_ctrl(s, c) { + ret = _discover_from_json_config_file(r, h, s, c, desc, + connect, defcfg, flags, force); } } -- 2.50.1