Blame SOURCES/sysfs-Use-the-presence-of-sys-block-dev-md-as-indica.patch

2c1b57
From 67a02d520085b01a1b9e6ea59fb30e79c5649c9c Mon Sep 17 00:00:00 2001
2c1b57
From: Jes Sorensen <Jes.Sorensen@gmail.com>
2c1b57
Date: Thu, 30 Mar 2017 16:02:36 -0400
2c1b57
Subject: [RHEL7.5 PATCH 047/169] sysfs: Use the presence of
2c1b57
 /sys/block/<dev>/md as indicator of valid device
2c1b57
2c1b57
Rather than calling ioctl(RAID_VERSION), use the presence of
2c1b57
/sys/block/<dev>/md as indicator of the device being valid and sysfs
2c1b57
being active for it. The ioctl could return valid data, but sysfs
2c1b57
not mounted, which renders sysfs_init() useless anyway.
2c1b57
2c1b57
Signed-off-by: Jes Sorensen <Jes.Sorensen@gmail.com>
2c1b57
---
2c1b57
 sysfs.c | 17 ++++++++++++-----
2c1b57
 1 file changed, 12 insertions(+), 5 deletions(-)
2c1b57
2c1b57
diff --git a/sysfs.c b/sysfs.c
2c1b57
index 2a91ba0..93ec3de 100644
2c1b57
--- a/sysfs.c
2c1b57
+++ b/sysfs.c
2c1b57
@@ -86,15 +86,22 @@ void sysfs_init_dev(struct mdinfo *mdi, unsigned long devid)
2c1b57
 
2c1b57
 void sysfs_init(struct mdinfo *mdi, int fd, char *devnm)
2c1b57
 {
2c1b57
+	struct stat stb;
2c1b57
+	char fname[MAX_SYSFS_PATH_LEN];
2c1b57
+
2c1b57
 	mdi->sys_name[0] = 0;
2c1b57
-	if (fd >= 0) {
2c1b57
-		mdu_version_t vers;
2c1b57
-		if (ioctl(fd, RAID_VERSION, &vers) != 0)
2c1b57
-			return;
2c1b57
+	if (fd >= 0)
2c1b57
 		devnm = fd2devnm(fd);
2c1b57
-	}
2c1b57
+
2c1b57
 	if (devnm == NULL)
2c1b57
 		return;
2c1b57
+
2c1b57
+	snprintf(fname, MAX_SYSFS_PATH_LEN, "/sys/block/%s/md", devnm);
2c1b57
+
2c1b57
+	if (stat(fname, &stb))
2c1b57
+		return;
2c1b57
+	if (!S_ISDIR(stb.st_mode))
2c1b57
+		return;
2c1b57
 	strcpy(mdi->sys_name, devnm);
2c1b57
 }
2c1b57
 
2c1b57
-- 
2c1b57
2.7.4
2c1b57