From 8ed95d22504d7b2b258d1800878e32c162badf8c Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Thu, 14 Jul 2022 10:02:27 -0700 Subject: [PATCH 181/217] cxl/memdev: Fix json for multi-device partitioning In the case when someone partitions several devices at once, collect all the affected memdevs into a json array. With the move to use util_display_json_array() that also requires a set of flags to be specifiied. Apply the UTIL_JSON_HUMAN flag for all interactive command result output to bring this command in line with other tools. Link: https://lore.kernel.org/r/165781814737.1555691.889129128205037941.stgit@dwillia2-xfh.jf.intel.com Cc: Alison Schofield Signed-off-by: Dan Williams Signed-off-by: Vishal Verma --- cxl/memdev.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/cxl/memdev.c b/cxl/memdev.c index 91d914d..9fcd8ae 100644 --- a/cxl/memdev.c +++ b/cxl/memdev.c @@ -19,6 +19,7 @@ struct action_context { FILE *f_out; FILE *f_in; + struct json_object *jdevs; }; static struct parameters { @@ -339,12 +340,13 @@ out: } static int action_setpartition(struct cxl_memdev *memdev, - struct action_context *actx) + struct action_context *actx) { const char *devname = cxl_memdev_get_devname(memdev); enum cxl_setpart_type type = CXL_SETPART_PMEM; unsigned long long size = ULLONG_MAX; struct json_object *jmemdev; + unsigned long flags; struct cxl_cmd *cmd; int rc; @@ -396,10 +398,12 @@ out_err: if (rc) log_err(&ml, "%s error: %s\n", devname, strerror(-rc)); - jmemdev = util_cxl_memdev_to_json(memdev, UTIL_JSON_PARTITION); - if (jmemdev) - printf("%s\n", json_object_to_json_string_ext(jmemdev, - JSON_C_TO_STRING_PRETTY)); + flags = UTIL_JSON_PARTITION; + if (actx->f_out == stdout && isatty(1)) + flags |= UTIL_JSON_HUMAN; + jmemdev = util_cxl_memdev_to_json(memdev, flags); + if (actx->jdevs && jmemdev) + json_object_array_add(actx->jdevs, jmemdev); return rc; } @@ -446,6 +450,9 @@ static int memdev_action(int argc, const char **argv, struct cxl_ctx *ctx, err++; } + if (action == action_setpartition) + actx.jdevs = json_object_new_array(); + if (err == argc) { usage_with_options(u, options); return -EINVAL; @@ -528,6 +535,15 @@ static int memdev_action(int argc, const char **argv, struct cxl_ctx *ctx, if (actx.f_in != stdin) fclose(actx.f_in); + if (actx.jdevs) { + unsigned long flags = 0; + + if (actx.f_out == stdout && isatty(1)) + flags |= UTIL_JSON_HUMAN; + util_display_json_array(actx.f_out, actx.jdevs, flags); + } + + out_close_fout: if (actx.f_out != stdout) fclose(actx.f_out); -- 2.27.0