From 3af35b9ef9a1b7823c91c0db71012fa757cdc916 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke Date: Tue, 1 Feb 2022 07:50:40 +0100 Subject: [PATCH] Rework nvme_scan_filter() Split off nvme_scan_filter() into nvme_create_root() and export the remaining functionality as nvme_scan_topology(). With that nvme_scan_filter() becomes pointless as the component functions can be called directly. Signed-off-by: Hannes Reinecke --- doc/libnvme.rst | 8 -------- doc/man/nvme_scan_filter.2 | 8 -------- src/libnvme.map | 3 ++- src/nvme/tree.c | 12 +++++++----- src/nvme/tree.h | 32 +++++++++++++++++++++----------- test/test.c | 6 ++++-- 6 files changed, 34 insertions(+), 35 deletions(-) delete mode 100644 doc/man/nvme_scan_filter.2 diff --git a/doc/libnvme.rst b/doc/libnvme.rst index 7f10748c..4b4f8a24 100644 --- a/doc/libnvme.rst +++ b/doc/libnvme.rst @@ -5840,14 +5840,6 @@ The nvme command status if a response was received (see ``nvme_subsystem_t s`` -.. c:function:: nvme_root_t nvme_scan_filter (nvme_scan_filter_t f) - - -**Parameters** - -``nvme_scan_filter_t f`` - - .. c:function:: nvme_root_t nvme_scan () diff --git a/doc/man/nvme_scan_filter.2 b/doc/man/nvme_scan_filter.2 deleted file mode 100644 index 8e9e62e3..00000000 --- a/doc/man/nvme_scan_filter.2 +++ /dev/null @@ -1,8 +0,0 @@ -.TH "nvme_scan_filter" 2 "nvme_scan_filter" "February 2020" "libnvme Manual" -.SH NAME -nvme_scan_filter \- -.SH SYNOPSIS -.B "nvme_root_t" nvme_scan_filter -.BI "(nvme_scan_filter_t " f ");" -.SH ARGUMENTS -.IP "f" 12 diff --git a/src/libnvme.map b/src/libnvme.map index 457fc086..009d44cd 100644 --- a/src/libnvme.map +++ b/src/libnvme.map @@ -8,6 +8,7 @@ LIBNVME_1_0 { nvme_capacity_mgmt; nvme_compare; nvme_copy; + nvme_create_root; nvme_create_ctrl; nvme_ctrl_disconnect; nvme_ctrl_first_ns; @@ -241,7 +242,7 @@ LIBNVME_1_0 { nvme_scan_ctrl; nvme_scan_ctrl_namespace_paths; nvme_scan_ctrl_namespaces; - nvme_scan_filter; + nvme_scan_topology; nvme_scan_namespace; nvme_scan_subsystem_namespaces; nvme_scan_subsystems; diff --git a/src/nvme/tree.c b/src/nvme/tree.c index cbdcff52..a2fe5335 100644 --- a/src/nvme/tree.c +++ b/src/nvme/tree.c @@ -71,11 +71,14 @@ nvme_host_t nvme_default_host(nvme_root_t r) return h; } -static int nvme_scan_topology(struct nvme_root *r, nvme_scan_filter_t f) +int nvme_scan_topology(struct nvme_root *r, nvme_scan_filter_t f) { struct dirent **subsys, **ctrls; int i, num_subsys, num_ctrls, ret; + if (!r) + return 0; + num_ctrls = nvme_scan_ctrls(&ctrls); if (num_ctrls < 0) { nvme_msg(r, LOG_DEBUG, "failed to scan ctrls: %s\n", @@ -118,7 +121,7 @@ static int nvme_scan_topology(struct nvme_root *r, nvme_scan_filter_t f) return 0; } -nvme_root_t nvme_scan_filter(nvme_scan_filter_t f, FILE *fp, int log_level) +nvme_root_t nvme_create_root(FILE *fp, int log_level) { struct nvme_root *r = calloc(1, sizeof(*r)); @@ -131,7 +134,6 @@ nvme_root_t nvme_scan_filter(nvme_scan_filter_t f, FILE *fp, int log_level) if (fp) r->fp = fp; list_head_init(&r->hosts); - nvme_scan_topology(r, f); return r; } @@ -147,10 +149,10 @@ void nvme_read_config(nvme_root_t r, const char *config_file) nvme_root_t nvme_scan(const char *config_file) { - nvme_root_t r = nvme_scan_filter(NULL, NULL, DEFAULT_LOGLEVEL); + nvme_root_t r = nvme_create_root(NULL, DEFAULT_LOGLEVEL); + nvme_scan_topology(r, NULL); nvme_read_config(r, config_file); - return r; } diff --git a/src/nvme/tree.h b/src/nvme/tree.h index 0225d091..00b75b00 100644 --- a/src/nvme/tree.h +++ b/src/nvme/tree.h @@ -56,6 +56,23 @@ typedef struct nvme_root *nvme_root_t; */ typedef bool (*nvme_scan_filter_t)(nvme_subsystem_t); +/** + * nvme_create_root() - Initialize root object + * @fp: filedescriptor for logging messages + * @log_level: logging level to use + * + * Return: initialized nvme_root_t structure + */ +nvme_root_t nvme_create_root(FILE *fp, int log_level); + +/** + * nvme_free_tree() - Free root object + * @r: nvme_root_t object + * + * Free an nvme_root_t object and all attached objects + */ +void nvme_free_tree(nvme_root_t r); + /** * nvme_first_host() - * @r: @@ -967,17 +984,16 @@ const char *nvme_subsystem_get_name(nvme_subsystem_t s); const char *nvme_subsystem_get_type(nvme_subsystem_t s); /** - * nvme_scan_filter() - Scan NVMe topology and apply filter + * nvme_scan_topology() - Scan NVMe topology and apply filter + * @r: nvme_root_t object * @f: filter to apply - * @fp: filepointer for error messages - * @log_level: logging level for this structure * * Scans the NVMe topology and filters out the resulting elements * by applying @f. * - * Return: nvme_root_t structure holding the resulting elements. + * Return: Number of elements scanned */ -nvme_root_t nvme_scan_filter(nvme_scan_filter_t f, FILE *fp, int log_level); +int nvme_scan_topology(nvme_root_t r, nvme_scan_filter_t f); /** * nvme_host_get_hostnqn() - @@ -1055,12 +1071,6 @@ int nvme_update_config(nvme_root_t r); */ int nvme_dump_config(nvme_root_t r); -/** - * nvme_free_tree() - - * @r: - */ -void nvme_free_tree(nvme_root_t r); - /** * nvme_get_attr() - * @dir: diff --git a/test/test.c b/test/test.c index 3dcbd2d0..2f2e9576 100644 --- a/test/test.c +++ b/test/test.c @@ -318,8 +318,10 @@ int main(int argc, char **argv) printf("Test filter for common loop back target\n"); nqn_match = "testnqn"; - r = nvme_scan_filter(nvme_match_subsysnqn_filter, NULL, - DEFAULT_LOGLEVEL); + r = nvme_create_root(NULL, DEFAULT_LOGLEVEL); + if (!r) + return 1; + nvme_scan_topology(r, nvme_match_subsysnqn_filter); nvme_for_each_host(r, h) { nvme_for_each_subsystem(h, s) { printf("%s - NQN=%s\n", nvme_subsystem_get_name(s), -- 2.50.1