From eb06760a002dc370bdc1426b1d96bcc8edee9698 Mon Sep 17 00:00:00 2001 From: Tokunori Ikegami Date: Sun, 2 Feb 2025 20:09:43 +0900 Subject: [PATCH] nvme: output NS management command result by json This is to use the command result NSID created by TP. Signed-off-by: Tokunori Ikegami --- nvme.c | 51 +++++++++++++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/nvme.c b/nvme.c index 0591fc7218..5624456a3b 100644 --- a/nvme.c +++ b/nvme.c @@ -2827,10 +2827,27 @@ static int id_endurance_grp_list(int argc, char **argv, struct command *cmd, return err; } -static void ns_mgmt_show_error(struct nvme_dev *dev, int err, const char *cmd) +static bool is_ns_mgmt_support(struct nvme_dev *dev) { - _cleanup_free_ struct nvme_id_ctrl *ctrl = NULL; + int err; + _cleanup_free_ struct nvme_id_ctrl *ctrl = nvme_alloc(sizeof(*ctrl)); + + if (ctrl) { + err = nvme_cli_identify_ctrl(dev, ctrl); + if (err) + goto out; + if (le16_to_cpu(ctrl->oacs) & NVME_CTRL_OACS_NS_MGMT) + return true; + return false; + } +out: + return true; +} + +static void ns_mgmt_show_status(struct nvme_dev *dev, int err, const char *cmd, char *name, + __u32 nsid) +{ if (err < 0) { nvme_show_error("%s namespace: %s", cmd, nvme_strerror(errno)); return; @@ -2838,15 +2855,14 @@ static void ns_mgmt_show_error(struct nvme_dev *dev, int err, const char *cmd) nvme_show_init(); - nvme_show_status(err); - - ctrl = nvme_alloc(sizeof(*ctrl)); - if (!ctrl) - return; - - err = nvme_cli_identify_ctrl(dev, ctrl); if (!err) { - if (!(le16_to_cpu(ctrl->oacs) & NVME_CTRL_OACS_NS_MGMT)) + nvme_show_key_value(true, false, name, "Success, %s", + !strcmp(cmd, "create") ? "created": + !strcmp(cmd, "delete") ? "deleted" : ""); + nvme_show_key_value(false, true, "nsid", "%d", nsid); + } else { + nvme_show_status(err); + if (!is_ns_mgmt_support(dev)) nvme_show_result("NS management and attachment not supported"); } @@ -2892,10 +2908,7 @@ static int delete_ns(int argc, char **argv, struct command *cmd, struct plugin * } err = nvme_cli_ns_mgmt_delete(dev, cfg.namespace_id, nvme_cfg.timeout); - if (!err) - printf("%s: Success, deleted nsid:%d\n", cmd->name, cfg.namespace_id); - else - ns_mgmt_show_error(dev, err, "delete"); + ns_mgmt_show_status(dev, err, "delete", cmd->name, cfg.namespace_id); return err; } @@ -2956,10 +2969,7 @@ static int nvme_attach_ns(int argc, char **argv, int attach, const char *desc, s err = nvme_cli_ns_detach_ctrls(dev, cfg.namespace_id, cntlist); - if (!err) - printf("%s: Success, nsid:%d\n", cmd->name, cfg.namespace_id); - else - ns_mgmt_show_error(dev, err, attach ? "attach" : "detach"); + ns_mgmt_show_status(dev, err, attach ? "attach" : "detach", cmd->name, cfg.namespace_id); return err; } @@ -3324,10 +3334,7 @@ static int create_ns(int argc, char **argv, struct command *cmd, struct plugin * data->phndl[i] = cpu_to_le16(phndl[i]); err = nvme_cli_ns_mgmt_create(dev, data, &nsid, nvme_cfg.timeout, cfg.csi); - if (!err) - printf("%s: Success, created nsid:%d\n", cmd->name, nsid); - else - ns_mgmt_show_error(dev, err, "create"); + ns_mgmt_show_status(dev, err, "create", cmd->name, nsid); return err; }