ndctl/list.c keeps track of a set of enum util_json_flags which are based on the command line options passed in. This handling is a little messy, though. We have an accessor function, listopts_to_flags(), which is used multiple times. We sometimes pass the flags around as function arguments, and we also have a copy stashed in the local struct list_filter_arg called "lfa". In some functions we access the flags in multiple ways.
These flags are local to ndctl/list.c, are set exactly once per invocation and never change. Create a variable local to that file, initialize it once and use it everywhere. Signed-off-by: Ross Zwisler <ross.zwis...@linux.intel.com> --- ndctl/list.c | 54 +++++++++++++++++++++++++++--------------------------- util/filter.h | 1 - 2 files changed, 27 insertions(+), 28 deletions(-) diff --git a/ndctl/list.c b/ndctl/list.c index 030d73f..32f679b 100644 --- a/ndctl/list.c +++ b/ndctl/list.c @@ -38,20 +38,7 @@ static struct { bool firmware; } list; -static unsigned long listopts_to_flags(void) -{ - unsigned long flags = 0; - - if (list.idle) - flags |= UTIL_JSON_IDLE; - if (list.media_errors) - flags |= UTIL_JSON_MEDIA_ERRORS; - if (list.dax) - flags |= UTIL_JSON_DAX | UTIL_JSON_DAX_DEVS; - if (list.human) - flags |= UTIL_JSON_HUMAN; - return flags; -} +static unsigned long list_flags; struct util_filter_params param; @@ -64,8 +51,7 @@ do { \ VERSION, __func__, __LINE__, ##__VA_ARGS__); \ } while (0) -static struct json_object *region_to_json(struct ndctl_region *region, - unsigned long flags) +static struct json_object *region_to_json(struct ndctl_region *region) { struct json_object *jregion = json_object_new_object(); struct json_object *jobj, *jbbs, *jmappings = NULL; @@ -83,13 +69,13 @@ static struct json_object *region_to_json(struct ndctl_region *region, goto err; json_object_object_add(jregion, "dev", jobj); - jobj = util_json_object_size(ndctl_region_get_size(region), flags); + jobj = util_json_object_size(ndctl_region_get_size(region), list_flags); if (!jobj) goto err; json_object_object_add(jregion, "size", jobj); jobj = util_json_object_size(ndctl_region_get_available_size(region), - flags); + list_flags); if (!jobj) goto err; json_object_object_add(jregion, "available_size", jobj); @@ -118,7 +104,8 @@ static struct json_object *region_to_json(struct ndctl_region *region, iset = ndctl_region_get_interleave_set(region); if (iset) { jobj = util_json_object_hex( - ndctl_interleave_set_get_cookie(iset), flags); + ndctl_interleave_set_get_cookie(iset), + list_flags); if (!jobj) fail("\n"); else @@ -147,7 +134,7 @@ static struct json_object *region_to_json(struct ndctl_region *region, json_object_object_add(jregion, "mappings", jmappings); } - jmapping = util_mapping_to_json(mapping, listopts_to_flags()); + jmapping = util_mapping_to_json(mapping, list_flags); if (!jmapping) { fail("\n"); continue; @@ -162,7 +149,7 @@ static struct json_object *region_to_json(struct ndctl_region *region, json_object_object_add(jregion, "state", jobj); } - jbbs = util_region_badblocks_to_json(region, &bb_count, flags); + jbbs = util_region_badblocks_to_json(region, &bb_count, list_flags); if (bb_count) { jobj = json_object_new_int(bb_count); if (!jobj) { @@ -171,7 +158,7 @@ static struct json_object *region_to_json(struct ndctl_region *region, } json_object_object_add(jregion, "badblock_count", jobj); } - if ((flags & UTIL_JSON_MEDIA_ERRORS) && jbbs) + if ((list_flags & UTIL_JSON_MEDIA_ERRORS) && jbbs) json_object_object_add(jregion, "badblocks", jbbs); pd = ndctl_region_get_persistence_domain(region); @@ -222,7 +209,7 @@ static void filter_namespace(struct ndctl_namespace *ndns, lfa->jnamespaces); } - jndns = util_namespace_to_json(ndns, lfa->flags); + jndns = util_namespace_to_json(ndns, list_flags); if (!jndns) { fail("\n"); return; @@ -256,7 +243,7 @@ static bool filter_region(struct ndctl_region *region, lfa->jregions); } - jregion = region_to_json(region, lfa->flags); + jregion = region_to_json(region); if (!jregion) { fail("\n"); return false; @@ -297,7 +284,7 @@ static void filter_dimm(struct ndctl_dimm *dimm, struct util_filter_ctx *ctx) json_object_object_add(lfa->jbus, "dimms", lfa->jdimms); } - jdimm = util_dimm_to_json(dimm, lfa->flags); + jdimm = util_dimm_to_json(dimm, list_flags); if (!jdimm) { fail("\n"); return; @@ -323,7 +310,7 @@ static void filter_dimm(struct ndctl_dimm *dimm, struct util_filter_ctx *ctx) if (list.firmware) { struct json_object *jfirmware; - jfirmware = util_dimm_firmware_to_json(dimm, lfa->flags); + jfirmware = util_dimm_firmware_to_json(dimm, list_flags); if (jfirmware) json_object_object_add(jdimm, "firmware", jfirmware); } @@ -412,6 +399,18 @@ static int num_list_flags(void) return list.buses + list.dimms + list.regions + list.namespaces; } +static void init_list_flags(void) +{ + if (list.idle) + list_flags |= UTIL_JSON_IDLE; + if (list.media_errors) + list_flags |= UTIL_JSON_MEDIA_ERRORS; + if (list.dax) + list_flags |= UTIL_JSON_DAX | UTIL_JSON_DAX_DEVS; + if (list.human) + list_flags |= UTIL_JSON_HUMAN; +} + int cmd_list(int argc, const char **argv, void *ctx) { const struct option options[] = { @@ -470,12 +469,13 @@ int cmd_list(int argc, const char **argv, void *ctx) if (num_list_flags() == 0) list.namespaces = true; + init_list_flags(); + fctx.filter_bus = filter_bus; fctx.filter_dimm = list.dimms ? filter_dimm : NULL; fctx.filter_region = filter_region; fctx.filter_namespace = list.namespaces ? filter_namespace : NULL; fctx.list = &lfa; - lfa.flags = listopts_to_flags(); rc = util_filter_walk(ctx, &fctx, ¶m); if (rc) diff --git a/util/filter.h b/util/filter.h index effda24..c410df2 100644 --- a/util/filter.h +++ b/util/filter.h @@ -47,7 +47,6 @@ struct list_filter_arg { struct json_object *jbuses; struct json_object *jregion; struct json_object *jbus; - unsigned long flags; }; /* -- 2.14.4 _______________________________________________ Linux-nvdimm mailing list Linux-nvdimm@lists.01.org https://lists.01.org/mailman/listinfo/linux-nvdimm