dcavalca / rpms / mdadm

Forked from rpms/mdadm 3 years ago
Clone

Blame SOURCES/Detail-don-t-exit-if-ioctl-has-been-successful.patch

b7f731
From 9b8fea914f82281c440cdce9dee6a3775265861c Mon Sep 17 00:00:00 2001
b7f731
From: Tomasz Majchrzak <tomasz.majchrzak@intel.com>
b7f731
Date: Wed, 24 May 2017 11:34:22 +0200
b7f731
Subject: [RHEL7.5 PATCH 147/169] Detail: don't exit if ioctl has been
b7f731
 successful
b7f731
b7f731
When GET_ARRAY_INFO ioctl is successful, mdadm exits with an error.
b7f731
It breaks udev and no links in /dev/md are created.
b7f731
b7f731
Also change debug print to error print in the message indicating lack
b7f731
of the link to facilitate debugging similar issues in the future.
b7f731
b7f731
Signed-off-by: Tomasz Majchrzak <tomasz.majchrzak@intel.com>
b7f731
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
b7f731
---
b7f731
 Detail.c | 27 +++++++++++++++------------
b7f731
 util.c   |  2 +-
b7f731
 2 files changed, 16 insertions(+), 13 deletions(-)
b7f731
b7f731
diff --git a/Detail.c b/Detail.c
b7f731
index bf881ff..2332b85 100644
b7f731
--- a/Detail.c
b7f731
+++ b/Detail.c
b7f731
@@ -99,21 +99,24 @@ int Detail(char *dev, struct context *c)
b7f731
 	inactive = (sra->array_state == ARRAY_ACTIVE ||
b7f731
 		    sra->array_state == ARRAY_CLEAR);
b7f731
 	st = super_by_fd(fd, &subarray);
b7f731
-	if (md_get_array_info(fd, &array) && errno == ENODEV) {
b7f731
-		if (sra->array.major_version == -1 &&
b7f731
-		    sra->array.minor_version == -1 &&
b7f731
-		    sra->devs == NULL) {
b7f731
-			pr_err("Array associated with md device %s does not exist.\n", dev);
b7f731
+	if (md_get_array_info(fd, &array)) {
b7f731
+		if (errno == ENODEV) {
b7f731
+			if (sra->array.major_version == -1 &&
b7f731
+			    sra->array.minor_version == -1 &&
b7f731
+			    sra->devs == NULL) {
b7f731
+				pr_err("Array associated with md device %s does not exist.\n",
b7f731
+				       dev);
b7f731
+				close(fd);
b7f731
+				sysfs_free(sra);
b7f731
+				return rv;
b7f731
+			}
b7f731
+			array = sra->array;
b7f731
+		} else {
b7f731
+			pr_err("cannot get array detail for %s: %s\n",
b7f731
+			       dev, strerror(errno));
b7f731
 			close(fd);
b7f731
-			sysfs_free(sra);
b7f731
 			return rv;
b7f731
 		}
b7f731
-		array = sra->array;
b7f731
-	} else {
b7f731
-		pr_err("cannot get array detail for %s: %s\n",
b7f731
-		       dev, strerror(errno));
b7f731
-		close(fd);
b7f731
-		return rv;
b7f731
 	}
b7f731
 
b7f731
 	if (fstat(fd, &stb) != 0 && !S_ISBLK(stb.st_mode))
b7f731
diff --git a/util.c b/util.c
b7f731
index d89438c..8eeb509 100644
b7f731
--- a/util.c
b7f731
+++ b/util.c
b7f731
@@ -1169,7 +1169,7 @@ void wait_for(char *dev, int fd)
b7f731
 			delay *= 2;
b7f731
 	}
b7f731
 	if (i == 25)
b7f731
-		dprintf("timeout waiting for %s\n", dev);
b7f731
+		pr_err("timeout waiting for %s\n", dev);
b7f731
 }
b7f731
 
b7f731
 struct superswitch *superlist[] =
b7f731
-- 
b7f731
2.7.4
b7f731