On Tue, 2018-03-13 at 16:33 -0700, Dan Williams wrote:
> When listing namespaces and regions a generic jplatform object is
> created to house the regions array. However, commit f8cc6fee4e4d
> "ndctl,
> list: refactor core topology walking into util_filter_walk()"
> inadvertently added namespaces to that jplatform, and otherwise
> failed
> to parent namespaces to their proper parent region.
>
> # ndctl list -RNu
> {
> "regions":[
> {
> "dev":"region1",
> "size":"511.00 GiB (548.68 GB)",
> "available_size":0,
> "type":"pmem",
> "numa_node":0,
> "namespaces":[
> {
> "dev":"namespace1.0",
> "mode":"raw",
> "size":"511.00 GiB (548.68 GB)",
> "sector_size":512,
> "blockdev":"pmem1",
> "numa_node":0
> },
> {
> "dev":"namespace0.0", <--- wrong region
> "mode":"fsdax",
> "size":"4.00 GiB (4.29 GB)",
> "sector_size":512,
> "blockdev":"pmem0",
> "numa_node":0
> }
> ]
> },
> {
> "dev":"region0",
> "size":"4.00 GiB (4.29 GB)",
> "available_size":0,
> "type":"pmem"
> }
> ],
> "namespaces":[ <-- we already listed the namespaces
> {
> "dev":"namespace1.0",
> "mode":"raw",
> "size":"511.00 GiB (548.68 GB)",
> "sector_size":512,
> "blockdev":"pmem1",
> "numa_node":0
> },
> {
> "dev":"namespace0.0",
> "mode":"fsdax",
> "size":"4.00 GiB (4.29 GB)",
> "sector_size":512,
> "blockdev":"pmem0",
> "numa_node":0
> }
> ]
> }
> ndctl: json_object.c:188: json_object_put: Assertion `jso-
> >_ref_count > 0' failed.
> Aborted (core dumped) <-- not ideal
>
> Clear out the jnamespaces tracking as the filter walk transitions to
> the
> next region, and make sure that jnamepsaces is not added to jplatform
> when regions are being displayed.
>
> Fixes: f8cc6fee4e4d(" ndctl, list: refactor core topology
> walking...")
> Signed-off-by: Dan Williams
> ---
> v2: fix breaking namespace arrays on region boundaries
>
> ndctl/list.c |9 -
> 1 file changed, 8 insertions(+), 1 deletion(-)
Looks good, queued.
>
> diff --git a/ndctl/list.c b/ndctl/list.c
> index 0ca5b6dee5eb..fe8036eabc3b 100644
> --- a/ndctl/list.c
> +++ b/ndctl/list.c
> @@ -245,6 +245,13 @@ static bool filter_region(struct ndctl_region
> *region,
> lfa->jregion = jregion;
>
> /*
> + * We've started a new region, any previous jnamespaces will
> + * have been parented to the last region. Clear out
> jnamespaces
> + * so we start a new array per region.
> + */
> + lfa->jnamespaces = NULL;
> +
> + /*
>* Without a bus we are collecting regions anonymously
> across
>* the platform.
>*/
> @@ -366,7 +373,7 @@ static int list_display(struct list_filter_arg
> *lfa)
> json_object_object_add(jplatform, "dimms",
> jdimms);
> if (jregions)
> json_object_object_add(jplatform, "regions",
> jregions);
> - if (jnamespaces)
> + if (jnamespaces && !jregions)
> json_object_object_add(jplatform,
> "namespaces",
> jnamespaces);
> printf("%s\n",
> json_object_to_json_string_ext(jplatform,
>
___
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm