You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.1 KiB
81 lines
2.1 KiB
From b9a0309c7fc3e6c1607d51ab3c3f8486478a65ef Mon Sep 17 00:00:00 2001 |
|
From: Jes Sorensen <jsorensen@fb.com> |
|
Date: Mon, 8 May 2017 17:34:08 -0400 |
|
Subject: [RHEL7.5 PATCH 117/169] Monitor: Use md_array_active() instead of |
|
manually fiddling in sysfs |
|
|
|
This removes a pile of clutter that can easily behandled with a simple |
|
check of array_state. |
|
|
|
Signed-off-by: Jes Sorensen <jsorensen@fb.com> |
|
--- |
|
Monitor.c | 39 +++++++++++---------------------------- |
|
1 file changed, 11 insertions(+), 28 deletions(-) |
|
|
|
diff --git a/Monitor.c b/Monitor.c |
|
index e2b36ff..b5231d2 100644 |
|
--- a/Monitor.c |
|
+++ b/Monitor.c |
|
@@ -454,7 +454,7 @@ static int check_array(struct state *st, struct mdstat_ent *mdstat, |
|
mdu_array_info_t array; |
|
struct mdstat_ent *mse = NULL, *mse2; |
|
char *dev = st->devname; |
|
- int fd = -1; |
|
+ int fd; |
|
int i; |
|
int remaining_disks; |
|
int last_disk; |
|
@@ -462,33 +462,7 @@ static int check_array(struct state *st, struct mdstat_ent *mdstat, |
|
|
|
if (test) |
|
alert("TestMessage", dev, NULL, ainfo); |
|
- if (st->devnm[0]) |
|
- fd = open("/sys/block", O_RDONLY|O_DIRECTORY); |
|
- if (fd >= 0) { |
|
- /* Don't open the device unless it is present and |
|
- * active in sysfs. |
|
- */ |
|
- char buf[10]; |
|
- close(fd); |
|
- fd = sysfs_open(st->devnm, NULL, "array_state"); |
|
- if (fd < 0 || |
|
- read(fd, buf, 10) < 5 || |
|
- strncmp(buf,"clear",5) == 0 || |
|
- strncmp(buf,"inact",5) == 0) { |
|
- if (fd >= 0) |
|
- close(fd); |
|
- fd = sysfs_open(st->devnm, NULL, "level"); |
|
- if (fd < 0 || read(fd, buf, 10) != 0) { |
|
- if (fd >= 0) |
|
- close(fd); |
|
- if (!st->err) |
|
- alert("DeviceDisappeared", dev, NULL, ainfo); |
|
- st->err++; |
|
- return 0; |
|
- } |
|
- } |
|
- close(fd); |
|
- } |
|
+ |
|
fd = open(dev, O_RDONLY); |
|
if (fd < 0) { |
|
if (!st->err) |
|
@@ -496,6 +470,15 @@ static int check_array(struct state *st, struct mdstat_ent *mdstat, |
|
st->err++; |
|
return 0; |
|
} |
|
+ |
|
+ if (!md_array_active(fd)) { |
|
+ close(fd); |
|
+ if (!st->err) |
|
+ alert("DeviceDisappeared", dev, NULL, ainfo); |
|
+ st->err++; |
|
+ return 0; |
|
+ } |
|
+ |
|
fcntl(fd, F_SETFD, FD_CLOEXEC); |
|
if (md_get_array_info(fd, &array) < 0) { |
|
if (!st->err) |
|
-- |
|
2.7.4 |
|
|
|
|