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>
This commit is contained in:
parent
4224685fe9
commit
b9a0309c7f
39
Monitor.c
39
Monitor.c
|
@ -454,7 +454,7 @@ static int check_array(struct state *st, struct mdstat_ent *mdstat,
|
||||||
mdu_array_info_t array;
|
mdu_array_info_t array;
|
||||||
struct mdstat_ent *mse = NULL, *mse2;
|
struct mdstat_ent *mse = NULL, *mse2;
|
||||||
char *dev = st->devname;
|
char *dev = st->devname;
|
||||||
int fd = -1;
|
int fd;
|
||||||
int i;
|
int i;
|
||||||
int remaining_disks;
|
int remaining_disks;
|
||||||
int last_disk;
|
int last_disk;
|
||||||
|
@ -462,33 +462,7 @@ static int check_array(struct state *st, struct mdstat_ent *mdstat,
|
||||||
|
|
||||||
if (test)
|
if (test)
|
||||||
alert("TestMessage", dev, NULL, ainfo);
|
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);
|
fd = open(dev, O_RDONLY);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
if (!st->err)
|
if (!st->err)
|
||||||
|
@ -496,6 +470,15 @@ static int check_array(struct state *st, struct mdstat_ent *mdstat,
|
||||||
st->err++;
|
st->err++;
|
||||||
return 0;
|
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);
|
fcntl(fd, F_SETFD, FD_CLOEXEC);
|
||||||
if (md_get_array_info(fd, &array) < 0) {
|
if (md_get_array_info(fd, &array) < 0) {
|
||||||
if (!st->err)
|
if (!st->err)
|
||||||
|
|
Loading…
Reference in New Issue