Skip to content

Commit 0fca385

Browse files
authored
Merge pull request #363 from igaw/apply-file-config
Consider file config when adding controller
2 parents 91f66d5 + 2e5d70c commit 0fca385

4 files changed

Lines changed: 50 additions & 8 deletions

File tree

src/libnvme.map

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ LIBNVME_1_0 {
2020
nvme_ctrl_first_ns;
2121
nvme_ctrl_first_path;
2222
nvme_ctrl_get_address;
23+
nvme_ctrl_get_config;
2324
nvme_ctrl_get_dhchap_key;
2425
nvme_ctrl_get_discovery_ctrl;
2526
nvme_ctrl_get_fd;

src/nvme/fabrics.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,10 +559,28 @@ static int __nvmf_add_ctrl(nvme_root_t r, const char *argstr)
559559
int nvmf_add_ctrl(nvme_host_t h, nvme_ctrl_t c,
560560
const struct nvme_fabrics_config *cfg)
561561
{
562+
nvme_subsystem_t s;
562563
char *argstr;
563564
int ret;
564565

566+
/* highest prio have configs from command line */
565567
cfg = merge_config(c, cfg);
568+
569+
/* apply configuration from config file (JSON) */
570+
s = nvme_lookup_subsystem(h, NULL, nvme_ctrl_get_subsysnqn(c));
571+
if (s) {
572+
nvme_ctrl_t fc;
573+
574+
fc = __nvme_lookup_ctrl(s, nvme_ctrl_get_transport(c),
575+
nvme_ctrl_get_traddr(c),
576+
nvme_ctrl_get_host_traddr(c),
577+
nvme_ctrl_get_host_iface(c),
578+
nvme_ctrl_get_trsvcid(c),
579+
NULL);
580+
if (fc)
581+
cfg = merge_config(c, nvme_ctrl_get_config(fc));
582+
}
583+
566584
nvme_ctrl_set_discovered(c, true);
567585
if (traddr_is_hostname(h->r, c)) {
568586
char *traddr = c->traddr;

src/nvme/private.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,11 @@ int json_update_config(nvme_root_t r, const char *config_file);
132132

133133
int json_dump_tree(nvme_root_t r);
134134

135+
nvme_ctrl_t __nvme_lookup_ctrl(nvme_subsystem_t s, const char *transport,
136+
const char *traddr, const char *host_traddr,
137+
const char *host_iface, const char *trsvcid,
138+
nvme_ctrl_t p);
139+
135140
#if (LOG_FUNCNAME == 1)
136141
#define __nvme_log_func __func__
137142
#else

src/nvme/tree.c

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,17 +1020,14 @@ struct nvme_ctrl *nvme_create_ctrl(nvme_root_t r,
10201020
return c;
10211021
}
10221022

1023-
nvme_ctrl_t nvme_lookup_ctrl(nvme_subsystem_t s, const char *transport,
1024-
const char *traddr, const char *host_traddr,
1025-
const char *host_iface, const char *trsvcid,
1026-
nvme_ctrl_t p)
1023+
nvme_ctrl_t __nvme_lookup_ctrl(nvme_subsystem_t s, const char *transport,
1024+
const char *traddr, const char *host_traddr,
1025+
const char *host_iface, const char *trsvcid,
1026+
nvme_ctrl_t p)
1027+
10271028
{
1028-
nvme_root_t r;
10291029
struct nvme_ctrl *c;
10301030

1031-
if (!s || !transport)
1032-
return NULL;
1033-
r = s->h ? s->h->r : NULL;
10341031
c = p ? nvme_subsystem_next_ctrl(s, p) : nvme_subsystem_first_ctrl(s);
10351032
for (; c != NULL; c = nvme_subsystem_next_ctrl(s, c)) {
10361033
if (strcmp(c->transport, transport))
@@ -1049,6 +1046,27 @@ nvme_ctrl_t nvme_lookup_ctrl(nvme_subsystem_t s, const char *transport,
10491046
continue;
10501047
return c;
10511048
}
1049+
1050+
return NULL;
1051+
}
1052+
1053+
nvme_ctrl_t nvme_lookup_ctrl(nvme_subsystem_t s, const char *transport,
1054+
const char *traddr, const char *host_traddr,
1055+
const char *host_iface, const char *trsvcid,
1056+
nvme_ctrl_t p)
1057+
{
1058+
nvme_root_t r;
1059+
struct nvme_ctrl *c;
1060+
1061+
if (!s || !transport)
1062+
return NULL;
1063+
1064+
c = __nvme_lookup_ctrl(s, transport, traddr, host_traddr,
1065+
host_iface, trsvcid, p);
1066+
if (c)
1067+
return c;
1068+
1069+
r = s->h ? s->h->r : NULL;
10521070
c = nvme_create_ctrl(r, s->subsysnqn, transport, traddr,
10531071
host_traddr, host_iface, trsvcid);
10541072
if (c) {

0 commit comments

Comments
 (0)