Skip to content

Commit 34f3fbd

Browse files
tbzatekigaw
authored andcommitted
nbft: Reuse existing discovery controller
Attempt to look up and use existing (persistent) discovery controller. Signed-off-by: Tomas Bzatek <tbzatek@redhat.com>
1 parent 326926c commit 34f3fbd

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

nbft.c

+15-6
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,7 @@ int discover_from_nbft(nvme_root_t r, char *hostnqn_arg, char *hostid_arg,
393393
for (dd = entry->nbft->discovery_list; dd && *dd; dd++) {
394394
nvme_ctrl_t c;
395395
bool linked = false;
396+
bool persistent = false;
396397
_cleanup_uri_ struct nvme_fabrics_uri *uri = NULL;
397398
_cleanup_free_ char *trsvcid = NULL;
398399

@@ -437,12 +438,19 @@ int discover_from_nbft(nvme_root_t r, char *hostnqn_arg, char *hostid_arg,
437438
.trsvcid = trsvcid,
438439
};
439440

440-
c = nvmf_create_discover_ctrl(r, h, cfg, &trcfg);
441-
if (!c && errno == ENVME_CONNECT_ADDRNOTAVAIL &&
442-
!strcmp(trcfg.transport, "tcp") &&
443-
strlen(hfi->tcp_info.dhcp_server_ipaddr) > 0) {
444-
trcfg.host_traddr = NULL;
441+
/* Lookup existing discovery controller */
442+
c = lookup_ctrl(h, &trcfg);
443+
if (c && nvme_ctrl_get_name(c))
444+
persistent = true;
445+
446+
if (!c) {
445447
c = nvmf_create_discover_ctrl(r, h, cfg, &trcfg);
448+
if (!c && errno == ENVME_CONNECT_ADDRNOTAVAIL &&
449+
!strcmp(trcfg.transport, "tcp") &&
450+
strlen(hfi->tcp_info.dhcp_server_ipaddr) > 0) {
451+
trcfg.host_traddr = NULL;
452+
c = nvmf_create_discover_ctrl(r, h, cfg, &trcfg);
453+
}
446454
}
447455

448456
if (!c) {
@@ -457,7 +465,8 @@ int discover_from_nbft(nvme_root_t r, char *hostnqn_arg, char *hostid_arg,
457465

458466
ret = do_discover(*dd, r, h, c, cfg, &trcfg,
459467
flags, verbose);
460-
nvme_disconnect_ctrl(c);
468+
if (!persistent)
469+
nvme_disconnect_ctrl(c);
461470
nvme_free_ctrl(c);
462471
if (ret == -ENOMEM)
463472
goto out_free;

0 commit comments

Comments
 (0)