@@ -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", ¶m.verbose, "turn on debug")
OPT_STRING('o', "output", ¶m.outfile, "output-file", \
"filename to write label area contents"), \
OPT_BOOLEAN('j', "json", ¶m.json, "parse label data into json"), \
-OPT_BOOLEAN('u', "human", ¶m.human, "use human friendly number formats ")
+OPT_BOOLEAN('u', "human", ¶m.human, "use human friendly number formats "), \
+OPT_BOOLEAN('I', "index", ¶m.index, "limit read to the index block area")
#define WRITE_OPTIONS() \
OPT_STRING('i', "input", ¶m.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)
Provide a capability to limit the read-labels payload to just the index-block data space. Signed-off-by: Dan Williams <dan.j.williams@intel.com> --- ndctl/dimm.c | 43 +++++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 16 deletions(-)