|
|
3d9256 |
From 0ffab5433084c8f93d152938e58be2a2162d8059 Mon Sep 17 00:00:00 2001
|
|
|
3d9256 |
From: David Milburn <dmilburn@redhat.com>
|
|
|
3d9256 |
Date: Tue, 18 Dec 2018 15:55:49 -0600
|
|
|
3d9256 |
Subject: [PATCH 5/5] nvme list : fix nvme list output if identify failed on
|
|
|
3d9256 |
device
|
|
|
3d9256 |
|
|
|
3d9256 |
commit 6c10501eb7e8423892735c5aa3b8c135d26fdbf3
|
|
|
3d9256 |
Author: Eyal Ben David <eyalbe@il.ibm.com>
|
|
|
3d9256 |
Date: Tue Aug 28 19:49:09 2018 +0300
|
|
|
3d9256 |
|
|
|
3d9256 |
nvme list : fix nvme list output if identify failed on device
|
|
|
3d9256 |
|
|
|
3d9256 |
changed files:
|
|
|
3d9256 |
nvme.c function list()
|
|
|
3d9256 |
nvme-ioctl.c function nvme_get_nsid() : return -errno if fstat fails
|
|
|
3d9256 |
|
|
|
3d9256 |
Signed-off-by: David Milburn <dmilburn@redhat.com>
|
|
|
3d9256 |
---
|
|
|
3d9256 |
nvme-ioctl.c | 2 +-
|
|
|
3d9256 |
nvme.c | 37 +++++++++++++++++++++++++------------
|
|
|
3d9256 |
2 files changed, 26 insertions(+), 13 deletions(-)
|
|
|
3d9256 |
|
|
|
3d9256 |
diff --git a/nvme-ioctl.c b/nvme-ioctl.c
|
|
|
3d9256 |
index c28a0d9..5444806 100644
|
|
|
3d9256 |
--- a/nvme-ioctl.c
|
|
|
3d9256 |
+++ b/nvme-ioctl.c
|
|
|
3d9256 |
@@ -74,7 +74,7 @@ int nvme_get_nsid(int fd)
|
|
|
3d9256 |
int err = fstat(fd, &nvme_stat);
|
|
|
3d9256 |
|
|
|
3d9256 |
if (err < 0)
|
|
|
3d9256 |
- return err;
|
|
|
3d9256 |
+ return -errno;
|
|
|
3d9256 |
|
|
|
3d9256 |
if (!S_ISBLK(nvme_stat.st_mode)) {
|
|
|
3d9256 |
fprintf(stderr,
|
|
|
3d9256 |
diff --git a/nvme.c b/nvme.c
|
|
|
3d9256 |
index 0722132..700a4d1 100644
|
|
|
3d9256 |
--- a/nvme.c
|
|
|
3d9256 |
+++ b/nvme.c
|
|
|
3d9256 |
@@ -1580,37 +1580,50 @@ static int list(int argc, char **argv, struct command *cmd, struct plugin *plugi
|
|
|
3d9256 |
list_items = calloc(n, sizeof(*list_items));
|
|
|
3d9256 |
if (!list_items) {
|
|
|
3d9256 |
fprintf(stderr, "can not allocate controller list payload\n");
|
|
|
3d9256 |
- return ENOMEM;
|
|
|
3d9256 |
+ ret = -ENOMEM;
|
|
|
3d9256 |
+ goto cleanup_devices;
|
|
|
3d9256 |
}
|
|
|
3d9256 |
|
|
|
3d9256 |
for (i = 0; i < n; i++) {
|
|
|
3d9256 |
snprintf(path, sizeof(path), "%s%s", dev, devices[i]->d_name);
|
|
|
3d9256 |
fd = open(path, O_RDONLY);
|
|
|
3d9256 |
if (fd < 0) {
|
|
|
3d9256 |
- fprintf(stderr, "can not open %s: %s\n", path,
|
|
|
3d9256 |
+ fprintf(stderr, "cannot open %s: %s\n", path,
|
|
|
3d9256 |
strerror(errno));
|
|
|
3d9256 |
- return errno;
|
|
|
3d9256 |
+ ret = -errno;
|
|
|
3d9256 |
+ goto cleanup_list_items;
|
|
|
3d9256 |
}
|
|
|
3d9256 |
ret = get_nvme_info(fd, &list_items[list_cnt], path);
|
|
|
3d9256 |
close(fd);
|
|
|
3d9256 |
- if (ret)
|
|
|
3d9256 |
+ if (ret == 0) {
|
|
|
3d9256 |
+ list_cnt++;
|
|
|
3d9256 |
+ }
|
|
|
3d9256 |
+ else if (ret > 0) {
|
|
|
3d9256 |
fprintf(stderr, "%s: failed to obtain nvme info: %s\n",
|
|
|
3d9256 |
- path, strerror(errno));
|
|
|
3d9256 |
+ path, nvme_status_to_string(ret));
|
|
|
3d9256 |
+ }
|
|
|
3d9256 |
+ else {
|
|
|
3d9256 |
+ fprintf(stderr, "%s: failed to obtain nvme info: %s\n",
|
|
|
3d9256 |
+ path, strerror(-ret));
|
|
|
3d9256 |
+ }
|
|
|
3d9256 |
+ }
|
|
|
3d9256 |
+
|
|
|
3d9256 |
+ if (list_cnt) {
|
|
|
3d9256 |
+ if (fmt == JSON)
|
|
|
3d9256 |
+ json_print_list_items(list_items, list_cnt);
|
|
|
3d9256 |
else
|
|
|
3d9256 |
- list_cnt++;
|
|
|
3d9256 |
+ show_list_items(list_items, list_cnt);
|
|
|
3d9256 |
}
|
|
|
3d9256 |
|
|
|
3d9256 |
- if (fmt == JSON)
|
|
|
3d9256 |
- json_print_list_items(list_items, list_cnt);
|
|
|
3d9256 |
- else
|
|
|
3d9256 |
- show_list_items(list_items, list_cnt);
|
|
|
3d9256 |
+ cleanup_list_items:
|
|
|
3d9256 |
+ free(list_items);
|
|
|
3d9256 |
|
|
|
3d9256 |
+ cleanup_devices:
|
|
|
3d9256 |
for (i = 0; i < n; i++)
|
|
|
3d9256 |
free(devices[i]);
|
|
|
3d9256 |
free(devices);
|
|
|
3d9256 |
- free(list_items);
|
|
|
3d9256 |
|
|
|
3d9256 |
- return 0;
|
|
|
3d9256 |
+ return ret;
|
|
|
3d9256 |
}
|
|
|
3d9256 |
|
|
|
3d9256 |
int __id_ctrl(int argc, char **argv, struct command *cmd, struct plugin *plugin, void (*vs)(__u8 *vs, struct json_object *root))
|
|
|
3d9256 |
--
|
|
|
3d9256 |
1.8.3.1
|
|
|
3d9256 |
|