return err;
}
+static void ns_mgmt_show_error(struct nvme_dev *dev, int err, const char *cmd)
+{
+ _cleanup_free_ struct nvme_id_ctrl *ctrl = NULL;
+
+ 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_result("NS management and attachment not supported");
+ }
+
+ nvme_show_finish();
+}
+
static int delete_ns(int argc, char **argv, struct command *cmd, struct plugin *plugin)
{
const char *desc = "Delete the given namespace by "
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 if (err > 0)
- nvme_show_status(err);
else
- nvme_show_error("delete namespace: %s", nvme_strerror(errno));
+ ns_mgmt_show_error(dev, err, "delete");
return err;
}
if (!err)
printf("%s: Success, nsid:%d\n", cmd->name, cfg.namespace_id);
- else if (err > 0)
- nvme_show_status(err);
else
- nvme_show_perror(attach ? "attach namespace" : "detach namespace");
+ ns_mgmt_show_error(dev, err, attach ? "attach" : "detach");
return err;
}
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 if (err > 0)
- nvme_show_status(err);
else
- nvme_show_error("create namespace: %s", nvme_strerror(errno));
+ ns_mgmt_show_error(dev, err, "create");
return err;
}