Skip to content

Commit

Permalink
nvme: output NS management command result by json
Browse files Browse the repository at this point in the history
This is to use the command result NSID created by TP.

Signed-off-by: Tokunori Ikegami <[email protected]>
  • Loading branch information
ikegami-t committed Feb 2, 2025
1 parent 705f711 commit 22f6229
Showing 1 changed file with 29 additions and 22 deletions.
51 changes: 29 additions & 22 deletions nvme.c
Original file line number Diff line number Diff line change
Expand Up @@ -2827,26 +2827,42 @@ 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;
}

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");
}

Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit 22f6229

Please sign in to comment.