Skip to content

Commit 75c9ce8

Browse files
committed
tree: add namespace path iterators
For some reason the namespace path iterators have not been implemented. Signed-off-by: Hannes Reinecke <[email protected]>
1 parent d213466 commit 75c9ce8

3 files changed

Lines changed: 50 additions & 0 deletions

File tree

src/libnvme.map

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,8 @@ LIBNVME_1_0 {
185185
nvme_namespace_attach_ctrls;
186186
nvme_namespace_detach_ctrls;
187187
nvme_namespace_filter;
188+
nvme_namespace_first_path;
189+
nvme_namespace_next_path;
188190
nvme_next_host;
189191
nvme_next_subsystem;
190192
nvme_ns_attach;

src/nvme/tree.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,16 @@ nvme_ns_t nvme_subsystem_next_ns(nvme_subsystem_t s, nvme_ns_t n)
325325
return n ? list_next(&s->namespaces, n, entry) : NULL;
326326
}
327327

328+
nvme_path_t nvme_namespace_first_path(nvme_ns_t ns)
329+
{
330+
return list_top(&ns->paths, struct nvme_path, nentry);
331+
}
332+
333+
nvme_path_t nvme_namespace_next_path(nvme_ns_t ns, nvme_path_t p)
334+
{
335+
return p ? list_next(&ns->paths, p, nentry) : NULL;
336+
}
337+
328338
static void __nvme_free_ns(struct nvme_ns *n)
329339
{
330340
list_del_init(&n->entry);

src/nvme/tree.h

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,23 @@ nvme_ctrl_t nvme_subsystem_first_ctrl(nvme_subsystem_t s);
216216
*/
217217
nvme_ctrl_t nvme_subsystem_next_ctrl(nvme_subsystem_t s, nvme_ctrl_t c);
218218

219+
/**
220+
* nvme_namespace_first_path() - Start path iterator
221+
* @ns: Namespace instance
222+
*
223+
* Return: First &nvme_path_t object of an @ns iterator
224+
*/
225+
nvme_path_t nvme_namespace_first_path(nvme_ns_t ns);
226+
227+
/**
228+
* nvme_namespace_next_path() - Next path iterator
229+
* @ns: Namespace instance
230+
* @p: Previous &nvme_path_t object of an @ns iterator
231+
*
232+
* Return: Next &nvme_path_t object of an @ns iterator
233+
*/
234+
nvme_path_t nvme_namespace_next_path(nvme_ns_t c, nvme_path_t p);
235+
219236
/**
220237
* nvme_lookup_ctrl() - Lookup nvme_ctrl_t object
221238
* @s: &nvme_subsystem_t object
@@ -403,6 +420,27 @@ nvme_ns_t nvme_subsystem_next_ns(nvme_subsystem_t s, nvme_ns_t n);
403420
for (n = nvme_subsystem_first_ns(s); n != NULL; \
404421
n = nvme_subsystem_next_ns(s, n))
405422

423+
/**
424+
* nvme_namespace_for_each_path_safe() - Traverse paths
425+
* @ns: Namespace instance
426+
* @p: &nvme_path_t object
427+
* @_p: A &nvme_path_t_node to use as temporary storage
428+
*/
429+
#define nvme_namespace_for_each_path_safe(n, p, _p) \
430+
for (p = nvme_namespace_first_path(n), \
431+
_p = nvme_namespace_next_path(n, p); \
432+
p != NULL; \
433+
p = _p, _p = nvme_namespace_next_path(n, p))
434+
435+
/**
436+
* nvme_namespace_for_each_path() - Traverse paths
437+
* @ns: Namespace instance
438+
* @p: &nvme_path_t object
439+
*/
440+
#define nvme_namespace_for_each_path(c, p) \
441+
for (p = nvme_namespace_first_path(c); p != NULL; \
442+
p = nvme_namespace_next_path(c, p))
443+
406444
/**
407445
* nvme_ns_get_fd() - Get associated filedescriptor
408446
* @n: Namespace instance

0 commit comments

Comments
 (0)