On Tue, May 29, 2018 at 11:52 AM, Verma, Vishal L <[email protected]> wrote: > On Mon, 2018-05-28 at 11:04 -0700, Dan Williams wrote: >> On Fri, May 25, 2018 at 3:36 PM Vishal Verma <[email protected]> >> wrote: >> >> > For 'fsdax' and 'devdax' namespaces, a 'map' location may be specified >> > for page structures storage. This can be 'mem', for system RAM, or >> > 'dev' >> > for using pmem as the backing storage. Once set, there was no way of >> > telling using ndctl, which of the two locations a namespace was >> > configured for. Add this in util_namespace_to_json so that all >> > namespace listings contain the map location. >> > Reported-by: "Yigal Korman" <[email protected]> >> > Cc: Dan Williams <[email protected]> >> > Signed-off-by: Vishal Verma <[email protected]> >> > --- >> > util/json.c | 18 ++++++++++++++++++ >> > 1 file changed, 18 insertions(+) >> > diff --git a/util/json.c b/util/json.c >> > index c606e1c..17dd90c 100644 >> > --- a/util/json.c >> > +++ b/util/json.c >> > @@ -667,11 +667,17 @@ struct json_object *util_namespace_to_json(struct >> >> ndctl_namespace *ndns, >> > { >> > struct json_object *jndns = json_object_new_object(); >> > struct json_object *jobj, *jbbs = NULL; >> > + const char *locations[] = { >> > + [NDCTL_PFN_LOC_NONE] = "none", >> > + [NDCTL_PFN_LOC_RAM] = "mem", >> > + [NDCTL_PFN_LOC_PMEM] = "dev", >> > + }; >> > unsigned long long size = ULLONG_MAX; >> > unsigned int sector_size = UINT_MAX; >> > enum ndctl_namespace_mode mode; >> > const char *bdev = NULL, *name; >> > unsigned int bb_count = 0; >> > + enum ndctl_pfn_loc loc; >> > struct ndctl_btt *btt; >> > struct ndctl_pfn *pfn; >> > struct ndctl_dax *dax; >> > @@ -749,6 +755,12 @@ struct json_object *util_namespace_to_json(struct >> >> ndctl_namespace *ndns, >> > jobj = util_raw_uuid(ndns); >> > if (jobj) >> > json_object_object_add(jndns, "raw_uuid", >> > jobj); >> > + loc = ndctl_pfn_get_location(pfn); >> > + jobj = json_object_new_string(locations[loc]); >> > + if (!jobj) >> > + goto err; >> > + if (jobj) >> > + json_object_object_add(jndns, "map", jobj); >> > bdev = ndctl_pfn_get_block_device(pfn); >> > } else if (dax) { >> > struct daxctl_region *dax_region; >> > @@ -763,6 +775,12 @@ struct json_object *util_namespace_to_json(struct >> >> ndctl_namespace *ndns, >> > jobj = util_raw_uuid(ndns); >> > if (jobj) >> > json_object_object_add(jndns, "raw_uuid", >> > jobj); >> > + loc = ndctl_dax_get_location(dax); >> > + jobj = json_object_new_string(locations[loc]); >> > + if (!jobj) >> > + goto err; >> > + if (jobj) >> > + json_object_object_add(jndns, "map", jobj); >> > if ((flags & UTIL_JSON_DAX) && dax_region) { >> > jobj = util_daxctl_region_to_json(dax_region, >> >> NULL, >> > flags); >> >> There appears to be one case missing in this: >> >> case NDCTL_NS_MODE_MEMORY: >> if (pfn) /* dynamic memory mode */ >> size = ndctl_pfn_get_size(pfn); >> else /* native/static memory mode */ >> size = ndctl_namespace_get_size(ndns); >> jobj = json_object_new_string("fsdax"); >> break; >> >> In the "/* native/static memory mode */" configuration we should emit a >> 'map:"mem"' indication. > > Ah good catch. Is this for legacy/labelless namespaces that have been > configured into fsdax mode?
This is strictly for memmap=ss!nn and legacy-e820 defined namespaces where the assumption is that they are small and never need to have the map allocated anywhere else but System RAM. _______________________________________________ Linux-nvdimm mailing list [email protected] https://lists.01.org/mailman/listinfo/linux-nvdimm
