Provide a capability to limit the read-labels payload to just the
index-block data space.

Signed-off-by: Dan Williams <[email protected]>
---
 ndctl/dimm.c |   43 +++++++++++++++++++++++++++----------------
 1 file changed, 27 insertions(+), 16 deletions(-)

diff --git a/ndctl/dimm.c b/ndctl/dimm.c
index 478e0fea3afc..a4b9999d9c67 100644
--- a/ndctl/dimm.c
+++ b/ndctl/dimm.c
@@ -54,6 +54,7 @@ static struct parameters {
        bool master_pass;
        bool human;
        bool force;
+       bool index;
        bool json;
        bool verbose;
 } param = {
@@ -275,27 +276,26 @@ static struct json_object *dump_json(struct ndctl_dimm 
*dimm,
 
        if (!jdimm)
                return NULL;
-       jindex = dump_index_json(cmd_read, size);
-       if (!jindex)
-               goto err_jindex;
-       jlabel = dump_label_json(dimm, cmd_read, size, flags);
-       if (!jlabel)
-               goto err_jlabel;
 
        jobj = json_object_new_string(ndctl_dimm_get_devname(dimm));
        if (!jobj)
-               goto err_jobj;
-
+               goto err;
        json_object_object_add(jdimm, "dev", jobj);
+
+       jindex = dump_index_json(cmd_read, size);
+       if (!jindex)
+               goto err;
        json_object_object_add(jdimm, "index", jindex);
+       if (param.index)
+               return jdimm;
+
+       jlabel = dump_label_json(dimm, cmd_read, size, flags);
+       if (!jlabel)
+               goto err;
        json_object_object_add(jdimm, "label", jlabel);
-       return jdimm;
 
- err_jobj:
-       json_object_put(jlabel);
- err_jlabel:
-       json_object_put(jindex);
- err_jindex:
+       return jdimm;
+err:
        json_object_put(jdimm);
        return NULL;
 }
@@ -384,7 +384,11 @@ static int action_read(struct ndctl_dimm *dimm, struct 
action_context *actx)
        ssize_t size;
        int rc = 0;
 
-       cmd_read = ndctl_dimm_read_label_extent(dimm, param.len, param.offset);
+       if (param.index)
+               cmd_read = ndctl_dimm_read_label_index(dimm);
+       else
+               cmd_read = ndctl_dimm_read_label_extent(dimm, param.len,
+                               param.offset);
        if (!cmd_read)
                return -EINVAL;
 
@@ -1046,7 +1050,8 @@ OPT_BOOLEAN('v',"verbose", &param.verbose, "turn on 
debug")
 OPT_STRING('o', "output", &param.outfile, "output-file", \
        "filename to write label area contents"), \
 OPT_BOOLEAN('j', "json", &param.json, "parse label data into json"), \
-OPT_BOOLEAN('u', "human", &param.human, "use human friendly number formats ")
+OPT_BOOLEAN('u', "human", &param.human, "use human friendly number formats "), 
\
+OPT_BOOLEAN('I', "index", &param.index, "limit read to the index block area")
 
 #define WRITE_OPTIONS() \
 OPT_STRING('i', "input", &param.infile, "input-file", \
@@ -1173,6 +1178,12 @@ static int dimm_action(int argc, const char **argv, 
struct ndctl_ctx *ctx,
                return -EINVAL;
        }
 
+       if (param.index && param.len) {
+               fprintf(stderr, "pick either --size, or --index, not both\n");
+               usage_with_options(u, options);
+               return -EINVAL;
+       }
+
        if (param.json) {
                actx.jdimms = json_object_new_array();
                if (!actx.jdimms)

_______________________________________________
Linux-nvdimm mailing list
[email protected]
https://lists.01.org/mailman/listinfo/linux-nvdimm

Reply via email to