Blame SOURCES/0005-nvme-list-fix-nvme-list-output-if-identify-failed-on.patch

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