On Wed, Jan 16, 2019 at 8:49 PM Oliver O'Halloran <[email protected]> wrote: > > Add the list of supported alignemnts to PFN and DAX namespaces. Also add the > list of supported sector sizes to BTT namespaces. > > Signed-off-by: Oliver O'Halloran <[email protected]> > --- > Not sure the namespace JSON blob are the best place to put these. The > region might be better, but slightly less accessable to users. > --- > util/json.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 47 insertions(+), 1 deletion(-) > > diff --git a/util/json.c b/util/json.c > index 77c96fb53c27..6c66033bd312 100644 > --- a/util/json.c > +++ b/util/json.c > @@ -303,6 +303,38 @@ struct json_object *util_daxctl_devs_to_list(struct > daxctl_region *region, > return jdevs; > } > > +#define _SZ(get_max, get_elem, type) \ > +static struct json_object *type##_build_size_array(struct type *arg) \ > +{ \ > + struct json_object *arr = json_object_new_array(); \ > + int i; \ > + \ > + if (!arr) \ > + return NULL; \ > + \ > + for (i = 0; i < get_max(arg); i++) { \ > + struct json_object *jobj; \ > + int64_t align; \ > + \ > + align = get_elem(arg, i); \ > + jobj = json_object_new_int64(align); \ > + if (!jobj) \ > + goto err; \ > + json_object_array_add(arr, jobj); \ > + } \ > + \ > + return arr; \ > +err: \ > + json_object_put(arr); \ > + return NULL; \ > +} > +#define SZ(type, kind) _SZ(ndctl_##type##_get_num_##kind##s, \ > + ndctl_##type##_get_supported_##kind, ndctl_##type) > +SZ(pfn, alignment) > +SZ(dax, alignment) > +SZ(btt, sector_size) > +//SZ(namespace, sector_size) > + > struct json_object *util_daxctl_region_to_json(struct daxctl_region *region, > const char *ident, unsigned long flags) > { > @@ -739,7 +771,7 @@ struct json_object *util_namespace_to_json(struct > ndctl_namespace *ndns, > { > struct json_object *jndns = json_object_new_object(); > enum ndctl_pfn_loc loc = NDCTL_PFN_LOC_NONE; > - struct json_object *jobj, *jbbs = NULL; > + struct json_object *jobj, *jbbs = NULL, *size_array = NULL; > const char *locations[] = { > [NDCTL_PFN_LOC_NONE] = "none", > [NDCTL_PFN_LOC_RAM] = "mem", > @@ -749,6 +781,7 @@ struct json_object *util_namespace_to_json(struct > ndctl_namespace *ndns, > unsigned int sector_size = UINT_MAX; > enum ndctl_namespace_mode mode; > const char *bdev = NULL, *name; > + const char *size_array_name; > unsigned int bb_count = 0; > struct ndctl_btt *btt; > struct ndctl_pfn *pfn; > @@ -936,6 +969,19 @@ struct json_object *util_namespace_to_json(struct > ndctl_namespace *ndns, > json_object_object_add(jndns, "numa_node", jobj); > } > > + if (pfn) { > + size_array_name = "supported_alignments"; > + size_array = ndctl_pfn_build_size_array(pfn); > + } else if (dax) { > + size_array_name = "supported_alignments"; > + size_array = ndctl_dax_build_size_array(dax); > + } else if (btt) { > + size_array_name = "supported sector sizes"; > + size_array = ndctl_btt_build_size_array(btt); > + } > + if (size_array) > + json_object_object_add(jndns, size_array_name, size_array);
So apparently I forgot to run the `make check` on v3 because this completely breaks the unit tests. The problem is that the tests rely on a sed script to parse the JSON blob into shell variables. That works when the JSON blob only contains scalars (and strings with no spaces), but it chokes when confronted with a JSON array. I can't think of any simple ways to fix it other than using a real JSON parser (jq?). Should I drop this patch for now? I don't mind doing a real fix if you don't mind waiting a bit longer :) Oliver > + > if (pfn) > jbbs = util_pfn_badblocks_to_json(pfn, &bb_count, flags); > else if (dax) > -- > 2.20.1 > _______________________________________________ Linux-nvdimm mailing list [email protected] https://lists.01.org/mailman/listinfo/linux-nvdimm
