Skip to content

Commit b3b9963

Browse files
committed
fabrics: refactore discover from json config
Move the connect logic out of the subsystem, ctrl loop. Too much indention. Signed-off-by: Daniel Wagner <dwagner@suse.de>
1 parent 89008c0 commit b3b9963

File tree

1 file changed

+81
-66
lines changed

1 file changed

+81
-66
lines changed

fabrics.c

+81-66
Original file line numberDiff line numberDiff line change
@@ -502,91 +502,106 @@ static int discover_from_conf_file(nvme_root_t r, nvme_host_t h,
502502
return ret;
503503
}
504504

505-
static int discover_from_json_config_file(nvme_root_t r, nvme_host_t h,
506-
const char *desc, bool connect,
505+
static int _discover_from_json_config_file(nvme_root_t r, nvme_host_t h, nvme_subsystem_t s,
506+
nvme_ctrl_t c, const char *desc, bool connect,
507507
const struct nvme_fabrics_config *defcfg,
508508
nvme_print_flags_t flags,
509509
bool force)
510510
{
511-
const char *transport, *traddr, *host_traddr, *host_iface, *trsvcid, *subsysnqn;
512-
nvme_subsystem_t s;
513-
nvme_ctrl_t c, cn;
511+
const char *transport, *traddr, *host_traddr;
512+
const char *host_iface, *trsvcid, *subsysnqn;
514513
struct nvme_fabrics_config cfg;
514+
nvme_ctrl_t cn;
515515
int ret = 0;
516516

517-
nvme_for_each_subsystem(h, s) {
518-
nvme_subsystem_for_each_ctrl(s, c) {
519-
transport = nvme_ctrl_get_transport(c);
520-
traddr = nvme_ctrl_get_traddr(c);
521-
host_traddr = nvme_ctrl_get_host_traddr(c);
522-
host_iface = nvme_ctrl_get_host_iface(c);
517+
transport = nvme_ctrl_get_transport(c);
518+
traddr = nvme_ctrl_get_traddr(c);
519+
host_traddr = nvme_ctrl_get_host_traddr(c);
520+
host_iface = nvme_ctrl_get_host_iface(c);
521+
522+
if (!transport && !traddr)
523+
return 0;
524+
525+
/* ignore none fabric transports */
526+
if (strcmp(transport, "tcp") &&
527+
strcmp(transport, "rdma") &&
528+
strcmp(transport, "fc"))
529+
return 0;
530+
531+
/* ignore if no host_traddr for fc */
532+
if (!strcmp(transport, "fc")) {
533+
if (!host_traddr) {
534+
fprintf(stderr, "host_traddr required for fc\n");
535+
return 0;
536+
}
537+
}
523538

524-
if (!transport && !traddr)
525-
continue;
539+
/* ignore if host_iface set for any transport other than tcp */
540+
if (!strcmp(transport, "rdma") || !strcmp(transport, "fc")) {
541+
if (host_iface) {
542+
fprintf(stderr,
543+
"host_iface not permitted for rdma or fc\n");
544+
return 0;
545+
}
546+
}
526547

527-
/* ignore none fabric transports */
528-
if (strcmp(transport, "tcp") &&
529-
strcmp(transport, "rdma") &&
530-
strcmp(transport, "fc"))
531-
continue;
548+
trsvcid = nvme_ctrl_get_trsvcid(c);
549+
if (!trsvcid || !strcmp(trsvcid, ""))
550+
trsvcid = nvmf_get_default_trsvcid(transport, true);
532551

533-
/* ignore if no host_traddr for fc */
534-
if (!strcmp(transport, "fc")) {
535-
if (!host_traddr) {
536-
fprintf(stderr, "host_traddr required for fc\n");
537-
continue;
538-
}
539-
}
552+
if (force)
553+
subsysnqn = nvme_ctrl_get_subsysnqn(c);
554+
else
555+
subsysnqn = NVME_DISC_SUBSYS_NAME;
540556

541-
/* ignore if host_iface set for any transport other than tcp */
542-
if (!strcmp(transport, "rdma") || !strcmp(transport, "fc")) {
543-
if (host_iface) {
544-
fprintf(stderr, "host_iface not permitted for rdma or fc\n");
545-
continue;
546-
}
547-
}
557+
if (nvme_ctrl_is_persistent(c))
558+
persistent = true;
548559

549-
trsvcid = nvme_ctrl_get_trsvcid(c);
550-
if (!trsvcid || !strcmp(trsvcid, ""))
551-
trsvcid = nvmf_get_default_trsvcid(transport,
552-
true);
560+
memcpy(&cfg, defcfg, sizeof(cfg));
553561

554-
if (force)
555-
subsysnqn = nvme_ctrl_get_subsysnqn(c);
556-
else
557-
subsysnqn = NVME_DISC_SUBSYS_NAME;
562+
struct tr_config trcfg = {
563+
.subsysnqn = subsysnqn,
564+
.transport = transport,
565+
.traddr = traddr,
566+
.host_traddr = host_traddr,
567+
.host_iface = host_iface,
568+
.trsvcid = trsvcid,
569+
};
558570

559-
if (nvme_ctrl_is_persistent(c))
560-
persistent = true;
571+
if (!force) {
572+
cn = lookup_ctrl(h, &trcfg);
573+
if (cn) {
574+
__discover(cn, &cfg, raw, connect, true, flags);
575+
return 0;
576+
}
577+
}
561578

562-
memcpy(&cfg, defcfg, sizeof(cfg));
579+
cn = nvmf_create_discover_ctrl(r, h, &cfg, &trcfg);
580+
if (!cn)
581+
return 0;
563582

564-
struct tr_config trcfg = {
565-
.subsysnqn = subsysnqn,
566-
.transport = transport,
567-
.traddr = traddr,
568-
.host_traddr = host_traddr,
569-
.host_iface = host_iface,
570-
.trsvcid = trsvcid,
571-
};
583+
__discover(cn, &cfg, raw, connect, persistent, flags);
584+
if (!(persistent || is_persistent_discovery_ctrl(h, cn)))
585+
ret = nvme_disconnect_ctrl(cn);
586+
nvme_free_ctrl(cn);
572587

573-
if (!force) {
574-
cn = lookup_ctrl(h, &trcfg);
575-
if (cn) {
576-
__discover(cn, &cfg, raw, connect,
577-
true, flags);
578-
continue;
579-
}
580-
}
588+
return ret;
589+
}
581590

582-
cn = nvmf_create_discover_ctrl(r, h, &cfg, &trcfg);
583-
if (!cn)
584-
continue;
591+
static int discover_from_json_config_file(nvme_root_t r, nvme_host_t h,
592+
const char *desc, bool connect,
593+
const struct nvme_fabrics_config *defcfg,
594+
nvme_print_flags_t flags,
595+
bool force)
596+
{
597+
nvme_subsystem_t s;
598+
nvme_ctrl_t c;
599+
int ret = 0;
585600

586-
__discover(cn, &cfg, raw, connect, persistent, flags);
587-
if (!(persistent || is_persistent_discovery_ctrl(h, cn)))
588-
ret = nvme_disconnect_ctrl(cn);
589-
nvme_free_ctrl(cn);
601+
nvme_for_each_subsystem(h, s) {
602+
nvme_subsystem_for_each_ctrl(s, c) {
603+
ret = _discover_from_json_config_file(r, h, s, c, desc,
604+
connect, defcfg, flags, force);
590605
}
591606
}
592607

0 commit comments

Comments
 (0)