@@ -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[]
@@ -261,6 +307,18 @@ include::human-option.txt[]
}
----
+ENVIRONMENT VARIABLES
+---------------------
+'NDCTL_LIST_LINT'::
+ A bug in the "ndctl list" output needs to be fixed with care for
+ other tooling that may have developed a dependency on the buggy
+ behavior. The NDCTL_LIST_LINT variable is an opt-in to apply
+ fixes, and not regress previously shipped behavior by default.
+ This environment variable applies the following fixups:
+ - Fix "ndctl list -Rv" to only show region objects and not include
+ namespace objects.
+::
+
include::../copyright.txt[]
SEE ALSO
@@ -481,6 +481,7 @@ int cmd_list(int argc, const char **argv, struct ndctl_ctx *ctx)
"ndctl list [<options>]",
NULL
};
+ bool lint = !!secure_getenv("NDCTL_LIST_LINT");
struct util_filter_ctx fctx = { 0 };
struct list_filter_arg lfa = { 0 };
int i, rc;
@@ -507,12 +508,20 @@ 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 (!lint) {
+ list.dimms = true;
+ list.buses = true;
+ list.regions = true;
+ } else 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;
+ if (!lint)
+ list.namespaces = true;
list.dax = true;
case 0:
break;
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. # export NDCTL_LIST_LINT=1 # 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. Note that a new NDCTL_LIST_LINT environment variable is added to limit this output cleanup to environments that were not dependent on the legacy behavior. Signed-off-by: Dan Williams <dan.j.williams@intel.com> --- Documentation/ndctl/ndctl-list.txt | 58 ++++++++++++++++++++++++++++++++++++ ndctl/list.c | 17 ++++++++--- 2 files changed, 71 insertions(+), 4 deletions(-)