The only expected difference between "ndctl list -R" and "ndctl list
-Rv" is some additional output fields. Instead it currently results in
the region array being contained in a named "regions" list object.
# ndctl list -R -r 0
[
{
"dev":"region0",
"size":4294967296,
"available_size":0,
"max_available_extent":0,
"type":"pmem",
"persistence_domain":"unknown"
}
]
# ndctl list -Rv -r 0
{
"regions":[
{
"dev":"region0",
"size":4294967296,
"available_size":0,
"max_available_extent":0,
"type":"pmem",
"numa_node":0,
"target_node":2,
"persistence_domain":"unknown",
"namespaces":[
{
"dev":"namespace0.0",
"mode":"fsdax",
"map":"mem",
"size":4294967296,
"sector_size":512,
"blockdev":"pmem0",
"numa_node":0,
"target_node":2
}
]
}
]
}
Drop the named list, by not including namespaces in the listing. Extra
objects only appear at the -vv level. "ndctl list -v" and "ndctl list
-Nv" are synonyms and behave as expected.
# ndctl list -Rv -r 0
[
{
"dev":"region0",
"size":4294967296,
"available_size":0,
"max_available_extent":0,
"type":"pmem",
"numa_node":0,
"target_node":2,
"persistence_domain":"unknown"
}
]
Another side effect of this change is that it allows for:
ndctl list -Rvvv
...to only show the verbose region details vs assuming that namespaces
and dimms etc also need to be added.
Signed-off-by: Dan Williams <dan.j.williams(a)intel.com>
---
Documentation/ndctl/ndctl-list.txt | 46 ++++++++++++++++++++++++++++++++++++
ndctl/list.c | 10 +++++---
2 files changed, 52 insertions(+), 4 deletions(-)
diff --git a/Documentation/ndctl/ndctl-list.txt b/Documentation/ndctl/ndctl-list.txt
index f9c7434d3b0b..75fd11876395 100644
--- a/Documentation/ndctl/ndctl-list.txt
+++ b/Documentation/ndctl/ndctl-list.txt
@@ -234,6 +234,52 @@ include::xable-bus-options.txt[]
- *-vvv*
Everything '-vv' provides, plus --health, --capabilities,
--idle, and --firmware.
+::
+ The verbosity can also be scoped by the object type. For example
+ to just list regions with capabilities and media error info.
+----
+# ndctl list -Ru -vvv -r 0
+{
+ "dev":"region0",
+ "size":"4.00 GiB (4.29 GB)",
+ "available_size":0,
+ "max_available_extent":0,
+ "type":"pmem",
+ "numa_node":0,
+ "target_node":2,
+ "capabilities":[
+ {
+ "mode":"sector",
+ "sector_sizes":[
+ 512,
+ 520,
+ 528,
+ 4096,
+ 4104,
+ 4160,
+ 4224
+ ]
+ },
+ {
+ "mode":"fsdax",
+ "alignments":[
+ 4096,
+ 2097152,
+ 1073741824
+ ]
+ },
+ {
+ "mode":"devdax",
+ "alignments":[
+ 4096,
+ 2097152,
+ 1073741824
+ ]
+ }
+ ],
+ "persistence_domain":"unknown"
+}
+----
include::human-option.txt[]
diff --git a/ndctl/list.c b/ndctl/list.c
index 607996a85784..125a9fe34cb8 100644
--- a/ndctl/list.c
+++ b/ndctl/list.c
@@ -507,12 +507,14 @@ int cmd_list(int argc, const char **argv, struct ndctl_ctx *ctx)
list.health = true;
list.capabilities = true;
case 2:
- list.dimms = true;
- list.buses = true;
- list.regions = true;
+ if (num_list_flags() == 0) {
+ list.dimms = true;
+ list.buses = true;
+ list.regions = true;
+ list.namespaces = true;
+ }
case 1:
list.media_errors = true;
- list.namespaces = true;
list.dax = true;
case 0:
break;