Skip to content

Commit 27d7aa3

Browse files
committed
tree: add nvme_subsystem_get
Replace the nvme_lookup_subsystem function with the nvme_subsystem_get function, which creates the subsystem object if necessary. This allows retiring the nvme_lookup_subsystem function from the public API. Signed-off-by: Daniel Wagner <[email protected]>
1 parent 1b374dd commit 27d7aa3

6 files changed

Lines changed: 49 additions & 15 deletions

File tree

libnvme/libnvme/nvme.i

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -600,15 +600,22 @@ struct nvme_ns {
600600
}
601601
%};
602602

603-
%pythonappend nvme_subsystem::nvme_subsystem(struct nvme_host *host,
603+
%pythonappend nvme_subsystem::nvme_subsystem(struct nvme_global_ctx *ctx,
604+
struct nvme_host *host,
604605
const char *subsysnqn,
605606
const char *name) {
606607
self.__parent = host # Keep a reference to parent to ensure garbage collection happens in the right order}
607608
%extend nvme_subsystem {
608-
nvme_subsystem(struct nvme_host *host,
609+
nvme_subsystem(struct nvme_global_ctx *ctx,
610+
struct nvme_host *host,
609611
const char *subsysnqn,
610612
const char *name = NULL) {
611-
return nvme_lookup_subsystem(host, name, subsysnqn);
613+
struct nvme_subsystem *s;
614+
615+
if (nvme_subsystem_get(ctx, host, name, subsysnqn, &s))
616+
return NULL;
617+
618+
return s;
612619
}
613620
~nvme_subsystem() {
614621
nvme_free_subsystem($self);

libnvme/src/libnvme.ld

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,6 @@ LIBNVME_2_0 {
129129
nvme_lookup_ctrl;
130130
nvme_lookup_key;
131131
nvme_lookup_keyring;
132-
nvme_lookup_subsystem;
133132
nvme_mi_admin_admin_passthru;
134133
nvme_mi_admin_xfer;
135134
nvme_mi_aem_disable;
@@ -248,6 +247,7 @@ LIBNVME_2_0 {
248247
nvme_subsys_filter;
249248
nvme_subsystem_first_ctrl;
250249
nvme_subsystem_first_ns;
250+
nvme_subsystem_get;
251251
nvme_subsystem_get_application;
252252
nvme_subsystem_get_fw_rev;
253253
nvme_subsystem_get_host;

libnvme/src/nvme/private.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,10 @@ void *__nvme_realloc(void *p, size_t len);
413413

414414
nvme_host_t nvme_lookup_host(struct nvme_global_ctx *ctx, const char *hostnqn,
415415
const char *hostid);
416+
nvme_subsystem_t nvme_lookup_subsystem(struct nvme_host *h,
417+
const char *name,
418+
const char *subsysnqn);
419+
416420

417421
#if (LOG_FUNCNAME == 1)
418422
#define __nvme_log_func __func__

libnvme/src/nvme/tree.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -736,6 +736,21 @@ struct nvme_subsystem *nvme_lookup_subsystem(struct nvme_host *h,
736736
return nvme_alloc_subsystem(h, name, subsysnqn);
737737
}
738738

739+
int nvme_subsystem_get(struct nvme_global_ctx *ctx,
740+
struct nvme_host *h, const char *name,
741+
const char *subsysnqn, struct nvme_subsystem **subsys)
742+
{
743+
struct nvme_subsystem *s;
744+
745+
s = nvme_lookup_subsystem(h, name, subsysnqn);
746+
if (!s)
747+
return -ENOMEM;
748+
749+
*subsys = s;
750+
751+
return 0;
752+
}
753+
739754
static void __nvme_free_host(struct nvme_host *h)
740755
{
741756
struct nvme_subsystem *s, *_s;

libnvme/src/nvme/tree.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -201,19 +201,20 @@ nvme_subsystem_t nvme_first_subsystem(nvme_host_t h);
201201
nvme_subsystem_t nvme_next_subsystem(nvme_host_t h, nvme_subsystem_t s);
202202

203203
/**
204-
* nvme_lookup_subsystem() - Lookup nvme_subsystem_t object
204+
* nvme_subsystem_get() - Returns nvme_subsystem_t object
205+
* @ctx: struct nvme_global_ctx object
205206
* @h: &nvme_host_t object
206207
* @name: Name of the subsystem (may be NULL)
207208
* @subsysnqn: Subsystem NQN
209+
* @s: nvme_subsystem_t object
208210
*
209-
* Lookup a &nvme_subsystem_t object in @h base on @name (if present)
211+
* Returns an &nvme_subsystem_t object in @h base on @name (if present)
210212
* and @subsysnqn or create one if not found.
211213
*
212-
* Return: nvme_subsystem_t object
213214
*/
214-
nvme_subsystem_t nvme_lookup_subsystem(struct nvme_host *h,
215-
const char *name,
216-
const char *subsysnqn);
215+
int nvme_subsystem_get(struct nvme_global_ctx *ctx,
216+
struct nvme_host *h, const char *name,
217+
const char *subsysnqn, struct nvme_subsystem **s);
217218

218219
/**
219220
* nvme_free_subsystem() - Free a subsystem

libnvme/test/tree.c

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,8 @@ static struct nvme_global_ctx *create_tree()
138138
for (int i = 0; i < ARRAY_SIZE(test_data); i++) {
139139
struct test_data *d = &test_data[i];
140140

141-
d->s = nvme_lookup_subsystem(h, d->subsysname, d->subsysnqn);
141+
assert(!nvme_subsystem_get(ctx, h, d->subsysname,
142+
d->subsysnqn, &d->s));
142143
assert(d->s);
143144
d->c = nvme_lookup_ctrl(d->s, d->transport, d->traddr,
144145
d->host_traddr, d->host_iface,
@@ -235,7 +236,7 @@ static bool ctrl_lookups(struct nvme_global_ctx *ctx)
235236
bool pass = true;
236237

237238
h = nvme_first_host(ctx);
238-
s = nvme_lookup_subsystem(h, DEFAULT_SUBSYSNAME, DEFAULT_SUBSYSNQN);
239+
nvme_subsystem_get(ctx, h, DEFAULT_SUBSYSNAME, DEFAULT_SUBSYSNQN, &s);
239240

240241
printf(" lookup controller:\n");
241242
for (int i = 0; i < ARRAY_SIZE(test_data); i++) {
@@ -290,7 +291,7 @@ static bool test_src_addr()
290291
nvme_host_get(ctx, DEFAULT_HOSTNQN, DEFAULT_HOSTID, &h);
291292
assert(h);
292293

293-
s = nvme_lookup_subsystem(h, DEFAULT_SUBSYSNAME, DEFAULT_SUBSYSNQN);
294+
nvme_subsystem_get(ctx, h, DEFAULT_SUBSYSNAME, DEFAULT_SUBSYSNQN, &s);
294295
assert(s);
295296

296297
c = nvme_lookup_ctrl(s, "tcp", "192.168.56.1", NULL, NULL, "8009", NULL);
@@ -466,7 +467,10 @@ static bool ctrl_match(const char *tag,
466467
nvme_host_get(ctx, DEFAULT_HOSTNQN, DEFAULT_HOSTID, &h);
467468
assert(h);
468469

469-
s = nvme_lookup_subsystem(h, DEFAULT_SUBSYSNAME, reference->subsysnqn ? reference->subsysnqn : DEFAULT_SUBSYSNQN);
470+
assert(!nvme_subsystem_get(ctx, h, DEFAULT_SUBSYSNAME,
471+
reference->subsysnqn ?
472+
reference->subsysnqn : DEFAULT_SUBSYSNQN,
473+
&s));
470474
assert(s);
471475

472476
reference_ctrl = nvme_lookup_ctrl(s, reference->transport, reference->traddr,
@@ -1079,7 +1083,10 @@ static bool ctrl_config_match(const char *tag,
10791083
nvme_host_get(ctx, DEFAULT_HOSTNQN, DEFAULT_HOSTID, &h);
10801084
assert(h);
10811085

1082-
s = nvme_lookup_subsystem(h, DEFAULT_SUBSYSNAME, reference->subsysnqn ? reference->subsysnqn : DEFAULT_SUBSYSNQN);
1086+
assert(!nvme_subsystem_get(ctx, h, DEFAULT_SUBSYSNAME,
1087+
reference->subsysnqn ?
1088+
reference->subsysnqn : DEFAULT_SUBSYSNQN,
1089+
&s));
10831090
assert(s);
10841091

10851092
reference_ctrl = nvme_lookup_ctrl(s, reference->transport, reference->traddr,

0 commit comments

Comments
 (0)