From: minwoo.im.dev@gmail.com (Minwoo Im)
Subject: [PATCH RFC 3/4] nvme: Return errno mapped for nvme error status
Date: Sun, 12 May 2019 04:37:12 +0900 [thread overview]
Message-ID: <20190511193713.29516-4-minwoo.im.dev@gmail.com> (raw)
In-Reply-To: <20190511193713.29516-1-minwoo.im.dev@gmail.com>
If ioctl module has returned a nvme error status, it will be returned
by being converted to a mapped errno value which has been provided by
previous commits.
Cc: Keith Busch <keith.busch at intel.com>
Cc: Chaitanya Kulkarni <chaitanya.Kulkarni at wdc.com>
Signed-off-by: Minwoo Im <minwoo.im.dev at gmail.com>
---
nvme.c | 180 +++++++++++++++++++++++++++++++++++----------------------
1 file changed, 110 insertions(+), 70 deletions(-)
diff --git a/nvme.c b/nvme.c
index 220fb18..2e1ce4f 100644
--- a/nvme.c
+++ b/nvme.c
@@ -48,6 +48,7 @@
#include "common.h"
#include "nvme-print.h"
#include "nvme-ioctl.h"
+#include "nvme-status.h"
#include "nvme-lightnvm.h"
#include "plugin.h"
@@ -213,9 +214,10 @@ static int get_smart_log(int argc, char **argv, struct command *cmd, struct plug
else
show_smart_log(&smart_log, cfg.namespace_id, devicename);
}
- else if (err > 0)
+ else if (err > 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
perror("smart log");
close_fd:
@@ -286,9 +288,10 @@ static int get_ana_log(int argc, char **argv, struct command *cmd,
json_ana_log(ana_log, devicename);
else
show_ana_log(ana_log, devicename);
- } else if (err > 0)
+ } else if (err > 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
perror("ana-log");
free(ana_log);
close_fd:
@@ -364,6 +367,7 @@ static int get_telemetry_log(int argc, char **argv, struct command *cmd, struct
perror("get-telemetry-log");
else if (err > 0) {
show_nvme_status(err);
+ err = nvme_status_to_errno(err, false);
fprintf(stderr, "Failed to acquire telemetry header %d!\n", err);
goto close_output;
}
@@ -402,6 +406,7 @@ static int get_telemetry_log(int argc, char **argv, struct command *cmd, struct
} else if (err > 0) {
fprintf(stderr, "Failed to acquire full telemetry log!\n");
show_nvme_status(err);
+ err = nvme_status_to_errno(err, false);
break;
}
@@ -467,9 +472,10 @@ static int get_endurance_log(int argc, char **argv, struct command *cmd, struct
json_endurance_log(&endurance_log, cfg.group_id, devicename);
else
show_endurance_log(&endurance_log, cfg.group_id, devicename);
- } else if (err > 0)
+ } else if (err > 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
perror("endurance log");
close_fd:
@@ -528,10 +534,10 @@ static int get_effects_log(int argc, char **argv, struct command *cmd, struct pl
json_effects_log(&effects, devicename);
else
show_effects_log(&effects, flags);
- }
- else if (err > 0)
+ } else if (err > 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
perror("effects log page");
close_fd:
@@ -610,10 +616,10 @@ static int get_error_log(int argc, char **argv, struct command *cmd, struct plug
json_error_log(err_log, cfg.log_entries, devicename);
else
show_error_log(err_log, cfg.log_entries, devicename);
- }
- else if (err > 0)
+ } else if (err > 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
perror("error log");
free(err_log);
}
@@ -666,10 +672,10 @@ static int get_fw_log(int argc, char **argv, struct command *cmd, struct plugin
json_fw_log(&fw_log, devicename);
else
show_fw_log(&fw_log, devicename);
- }
- else if (err > 0)
+ } else if (err > 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
perror("fw log");
close_fd:
@@ -722,9 +728,10 @@ static int get_changed_ns_list_log(int argc, char **argv, struct command *cmd, s
json_changed_ns_list_log(&changed_ns_list_log, devicename);
else
show_changed_ns_list_log(&changed_ns_list_log, devicename);
- } else if (err > 0)
+ } else if (err > 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
perror("changed ns list log");
close_fd:
@@ -820,9 +827,10 @@ static int get_log(int argc, char **argv, struct command *cmd, struct plugin *pl
d(log, cfg.log_len, 16, 1);
} else
d_raw((unsigned char *)log, cfg.log_len);
- } else if (err > 0)
+ } else if (err > 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
perror("log page");
free(log);
}
@@ -883,10 +891,10 @@ static int sanitize_log(int argc, char **argv, struct command *command, struct p
json_sanitize_log(&sanitize_log, devicename);
else
show_sanitize_log(&sanitize_log, flags, devicename);
- }
- else if (ret > 0)
+ } else if (ret > 0) {
show_nvme_status(ret);
- else
+ ret = nvme_status_to_errno(ret, false);
+ } else
perror("sanitize status log");
close_fd:
@@ -934,10 +942,10 @@ static int list_ctrl(int argc, char **argv, struct command *cmd, struct plugin *
for (i = 0; i < (min(num, 2048)); i++)
printf("[%4u]:%#x\n", i, le16_to_cpu(cntlist->identifier[i]));
- }
- else if (err > 0)
+ } else if (err > 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
perror("id controller list");
free(cntlist);
@@ -980,10 +988,10 @@ static int list_ns(int argc, char **argv, struct command *cmd, struct plugin *pl
for (i = 0; i < 1024; i++)
if (ns_list[i])
printf("[%4u]:%#x\n", i, le32_to_cpu(ns_list[i]));
- }
- else if (err > 0)
+ } else if (err > 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
perror("id namespace list");
close(fd);
@@ -1052,9 +1060,10 @@ static int delete_ns(int argc, char **argv, struct command *cmd, struct plugin *
if (!err)
printf("%s: Success, deleted nsid:%d\n", cmd->name,
cfg.namespace_id);
- else if (err > 0)
+ else if (err > 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
perror("delete namespace");
close_fd:
@@ -1117,9 +1126,10 @@ static int nvme_attach_ns(int argc, char **argv, int attach, const char *desc, s
if (!err)
printf("%s: Success, nsid:%d\n", cmd->name, cfg.namespace_id);
- else if (err > 0)
+ else if (err > 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
perror(attach ? "attach namespace" : "detach namespace");
close_fd:
@@ -1216,6 +1226,7 @@ static int create_ns(int argc, char **argv, struct command *cmd, struct plugin *
else {
fprintf(stderr, "identify failed\n");
show_nvme_status(err);
+ err = nvme_status_to_errno(err, false);
}
return err;
}
@@ -1241,9 +1252,10 @@ static int create_ns(int argc, char **argv, struct command *cmd, struct plugin *
cfg.nmic, cfg.timeout, &nsid);
if (!err)
printf("%s: Success, created nsid:%d\n", cmd->name, nsid);
- else if (err > 0)
+ else if (err > 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
perror("create namespace");
close(fd);
@@ -1840,6 +1852,7 @@ static int list(int argc, char **argv, struct command *cmd, struct plugin *plugi
else if (ret > 0) {
fprintf(stderr, "identify failed\n");
show_nvme_status(ret);
+ ret = nvme_status_to_errno(ret, false);
}
else {
fprintf(stderr, "%s: failed to obtain nvme info: %s\n",
@@ -1927,10 +1940,10 @@ int __id_ctrl(int argc, char **argv, struct command *cmd, struct plugin *plugin,
printf("NVME Identify Controller:\n");
__show_nvme_id_ctrl(&ctrl, flags, vs);
}
- }
- else if (err > 0)
+ } else if (err > 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
perror("identify controller");
close_fd:
@@ -2006,10 +2019,10 @@ static int ns_descs(int argc, char **argv, struct command *cmd, struct plugin *p
printf("NVME Namespace Identification Descriptors NS %d:\n", cfg.namespace_id);
show_nvme_id_ns_descs(nsdescs);
}
- }
- else if (err > 0)
+ } else if (err > 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
perror("identify namespace");
free(nsdescs);
@@ -2095,10 +2108,10 @@ static int id_ns(int argc, char **argv, struct command *cmd, struct plugin *plug
printf("NVME Identify Namespace %d:\n", cfg.namespace_id);
show_nvme_id_ns(&ns, flags);
}
- }
- else if (err > 0)
+ } else if (err > 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
perror("identify namespace");
close_fd:
@@ -2153,10 +2166,10 @@ static int id_nvmset(int argc, char **argv, struct command *cmd, struct plugin *
printf("NVME Identify NVM Set List %d:\n", cfg.nvmset_id);
show_nvme_id_nvmset(&nvmset);
}
- }
- else if (err > 0)
+ } else if (err > 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
perror("identify nvm set list");
close_fd:
@@ -2247,6 +2260,7 @@ static int virtual_mgmt(int argc, char **argv, struct command *cmd, struct plugi
}
else if (err > 0) {
show_nvme_status(err);
+ err = nvme_status_to_errno(err, false);
} else
perror("virt-mgmt");
@@ -2374,6 +2388,7 @@ static int device_self_test(int argc, char **argv, struct command *cmd, struct p
printf("Device self-test started\n");
} else if (err > 0) {
show_nvme_status(err);
+ err = nvme_status_to_errno(err, false);
} else
perror("Device self-test");
@@ -2427,6 +2442,7 @@ static int self_test_log(int argc, char **argv, struct command *cmd, struct plug
}
} else if (err > 0) {
show_nvme_status(err);
+ err = nvme_status_to_errno(err, false);
} else {
perror("self_test_log");
}
@@ -2556,6 +2572,7 @@ static int get_feature(int argc, char **argv, struct command *cmd, struct plugin
d_raw(buf, cfg.data_len);
} else if (err > 0) {
show_nvme_status(err);
+ err = nvme_status_to_errno(err, false);
} else
perror("get-feature");
@@ -2654,6 +2671,7 @@ static int fw_download(int argc, char **argv, struct command *cmd, struct plugin
break;
} else if (err != 0) {
show_nvme_status(err);
+ err = nvme_status_to_errno(err, false);
break;
}
fw_buf += cfg.xfer;
@@ -2750,6 +2768,7 @@ static int fw_commit(int argc, char **argv, struct command *cmd, struct plugin *
break;
default:
show_nvme_status(err);
+ err = nvme_status_to_errno(err, false);
break;
}
else {
@@ -2925,8 +2944,10 @@ static int sanitize(int argc, char **argv, struct command *cmd, struct plugin *p
cfg.no_dealloc, cfg.ovrpat);
if (ret < 0)
perror("sanitize");
- else if (ret > 0)
+ else if (ret > 0) {
show_nvme_status(ret);
+ ret = nvme_status_to_errno(ret, false);
+ }
close_fd:
close(fd);
@@ -3051,6 +3072,7 @@ static int get_property(int argc, char **argv, struct command *cmd, struct plugi
show_single_property(cfg.offset, value, cfg.human_readable);
} else if (err > 0) {
show_nvme_status(err);
+ err = nvme_status_to_errno(err, false);
}
close_fd:
@@ -3106,6 +3128,7 @@ static int set_property(int argc, char **argv, struct command *cmd, struct plugi
nvme_register_to_string(cfg.offset), cfg.value);
} else if (err > 0) {
show_nvme_status(err);
+ err = nvme_status_to_errno(err, false);
}
close_fd:
@@ -3201,6 +3224,7 @@ static int format(int argc, char **argv, struct command *cmd, struct plugin *plu
else {
fprintf(stderr, "identify failed\n");
show_nvme_status(err);
+ err = nvme_status_to_errno(err, false);
}
return err;
}
@@ -3257,9 +3281,10 @@ static int format(int argc, char **argv, struct command *cmd, struct plugin *plu
cfg.pil, cfg.ms, cfg.timeout);
if (err < 0)
perror("format");
- else if (err != 0)
+ else if (err != 0) {
show_nvme_status(err);
- else {
+ err = nvme_status_to_errno(err, false);
+ } else {
printf("Success formatting namespace:%x\n", cfg.namespace_id);
ioctl(fd, BLKRRPART);
if (cfg.reset && S_ISCHR(nvme_stat.st_mode))
@@ -3378,8 +3403,10 @@ static int set_feature(int argc, char **argv, struct command *cmd, struct plugin
else
d(buf, cfg.data_len, 16, 1);
}
- } else if (err > 0)
+ } else if (err > 0) {
show_nvme_status(err);
+ err = nvme_status_to_errno(err, false);
+ }
close_ffd:
close(ffd);
@@ -3625,8 +3652,10 @@ static int dir_send(int argc, char **argv, struct command *cmd, struct plugin *p
d_raw(buf, cfg.data_len);
}
}
- else if (err > 0)
+ else if (err > 0) {
show_nvme_status(err);
+ err = nvme_status_to_errno(err, false);
+ }
close_ffd:
close(ffd);
@@ -3682,9 +3711,10 @@ static int write_uncor(int argc, char **argv, struct command *cmd, struct plugin
cfg.block_count);
if (err < 0)
perror("write uncorrectable");
- else if (err != 0)
+ else if (err != 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
printf("NVME Write Uncorrectable Success\n");
close_fd:
@@ -3774,9 +3804,10 @@ static int write_zeroes(int argc, char **argv, struct command *cmd, struct plugi
control, cfg.ref_tag, cfg.app_tag, cfg.app_tag_mask);
if (err < 0)
perror("write-zeroes");
- else if (err != 0)
+ else if (err != 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
printf("NVME Write Zeroes Success\n");
close_fd:
@@ -3874,9 +3905,10 @@ static int dsm(int argc, char **argv, struct command *cmd, struct plugin *plugin
err = nvme_dsm(fd, cfg.namespace_id, cfg.cdw11, dsm, nr);
if (err < 0)
perror("data-set management");
- else if (err != 0)
+ else if (err != 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
printf("NVMe DSM: success\n");
close_fd:
@@ -3922,9 +3954,10 @@ static int flush(int argc, char **argv, struct command *cmd, struct plugin *plug
err = nvme_flush(fd, cfg.namespace_id);
if (err < 0)
perror("flush");
- else if (err != 0)
+ else if (err != 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
printf("NVMe Flush: success\n");
close_fd:
close(fd);
@@ -3995,9 +4028,10 @@ static int resv_acquire(int argc, char **argv, struct command *cmd, struct plugi
!!cfg.iekey, cfg.crkey, cfg.prkey);
if (err < 0)
perror("reservation acquire");
- else if (err != 0)
+ else if (err != 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
printf("NVME Reservation Acquire success\n");
close_fd:
@@ -4072,9 +4106,10 @@ static int resv_register(int argc, char **argv, struct command *cmd, struct plug
!!cfg.iekey, cfg.crkey, cfg.nrkey);
if (err < 0)
perror("reservation register");
- else if (err != 0)
+ else if (err != 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
printf("NVME Reservation success\n");
close_fd:
@@ -4145,9 +4180,10 @@ static int resv_release(int argc, char **argv, struct command *cmd, struct plugi
!!cfg.iekey, cfg.crkey);
if (err < 0)
perror("reservation release");
- else if (err != 0)
+ else if (err != 0) {
show_nvme_status(err);
- else
+ err = nvme_status_to_errno(err, false);
+ } else
printf("NVME Reservation Release success\n");
close_fd:
@@ -4463,9 +4499,10 @@ static int submit_io(int opcode, char *command, const char *desc,
command, elapsed_utime(start_time, end_time));
if (err < 0)
perror("submit-io");
- else if (err)
+ else if (err) {
show_nvme_status(err);
- else {
+ err = nvme_status_to_errno(err, false);
+ } else {
if (!(opcode & 1) && write(dfd, (void *)buffer, cfg.data_size) < 0) {
fprintf(stderr, "write: %s: failed to write buffer to output file\n",
strerror(errno));
@@ -4720,8 +4757,10 @@ static int dir_receive(int argc, char **argv, struct command *cmd, struct plugin
}
}
}
- else if (err > 0)
+ else if (err > 0) {
show_nvme_status(err);
+ err = nvme_status_to_errno(err, false);
+ }
free:
if (cfg.data_len)
free(buf);
@@ -4904,9 +4943,10 @@ static int passthru(int argc, char **argv, int ioctl_cmd, const char *desc, stru
cfg.timeout, &result);
if (err < 0)
perror("passthru");
- else if (err)
+ else if (err) {
show_nvme_status(err);
- else {
+ err = nvme_status_to_errno(err, false);
+ } else {
if (!cfg.raw_binary) {
fprintf(stderr, "NVMe command result:%08x\n", result);
if (data && cfg.read && !err)
--
2.17.1
next prev parent reply other threads:[~2019-05-11 19:37 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-11 19:37 [PATCH RFC 0/4] nvme-cli: Introduce nvme-status mapping with errno Minwoo Im
2019-05-11 19:37 ` [PATCH 1/4] nvme.h: Fix typos in status code values Minwoo Im
2019-05-11 21:51 ` Chaitanya Kulkarni
2019-05-11 19:37 ` [PATCH RFC 2/4] nvme-status: Introduce nvme status module to map errno Minwoo Im
2019-05-11 21:58 ` Chaitanya Kulkarni
2019-05-11 22:24 ` Minwoo Im
2019-05-12 15:22 ` Chaitanya Kulkarni
2019-05-11 19:37 ` Minwoo Im [this message]
2019-05-11 19:37 ` [PATCH RFC 4/4] fabrics: Return errno mapped for fabrics error status Minwoo Im
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190511193713.29516-4-minwoo.im.dev@gmail.com \
--to=minwoo.im.dev@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.