]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
fabrics: refactore discover from json config
authorDaniel Wagner <dwagner@suse.de>
Fri, 5 Jul 2024 12:35:30 +0000 (14:35 +0200)
committerDaniel Wagner <wagi@monom.org>
Fri, 12 Jul 2024 08:24:32 +0000 (10:24 +0200)
Move the connect logic out of the subsystem, ctrl loop. Too much
indention.

Signed-off-by: Daniel Wagner <dwagner@suse.de>
fabrics.c

index d42bdc19d28bc984953d3a6281d001b4c14adfd6..db5cc97d7418e86edf685551d630ab30649bdb95 100644 (file)
--- 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);
                }
        }