mdmon: fix removed disk handling
Use SKIP_GONE_DEVS when reading the container, and correct some confused logic in manage_new(). Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
dab4a5134e
commit
7da80e6faa
17
managemon.c
17
managemon.c
|
@ -283,7 +283,7 @@ static void manage_container(struct mdstat_ent *mdstat,
|
|||
* To see what is removed and what is added.
|
||||
* These need to be remove from, or added to, the array
|
||||
*/
|
||||
mdi = sysfs_read(-1, mdstat->devnum, GET_DEVS);
|
||||
mdi = sysfs_read(-1, mdstat->devnum, GET_DEVS|SKIP_GONE_DEVS);
|
||||
if (!mdi) {
|
||||
/* invalidate the current count so we can try again */
|
||||
container->devcnt = -1;
|
||||
|
@ -460,7 +460,7 @@ static void manage_new(struct mdstat_ent *mdstat,
|
|||
if (i == di->disk.raid_disk)
|
||||
break;
|
||||
|
||||
if (di) {
|
||||
if (di && newd) {
|
||||
memcpy(newd, di, sizeof(*newd));
|
||||
|
||||
newd->state_fd = sysfs_open(new->devnum,
|
||||
|
@ -469,13 +469,16 @@ static void manage_new(struct mdstat_ent *mdstat,
|
|||
|
||||
newd->prev_state = read_dev_state(newd->state_fd);
|
||||
newd->curr_state = newd->prev_state;
|
||||
} else if (failed + 1 > new->info.array.failed_disks) {
|
||||
/* we cannot properly monitor without all working disks */
|
||||
new->container = NULL;
|
||||
break;
|
||||
} else {
|
||||
if (newd)
|
||||
free(newd);
|
||||
|
||||
failed++;
|
||||
free(newd);
|
||||
if (failed > new->info.array.failed_disks) {
|
||||
/* we cannot properly monitor without all working disks */
|
||||
new->container = NULL;
|
||||
break;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
sprintf(newd->sys_name, "rd%d", i);
|
||||
|
|
2
mdmon.c
2
mdmon.c
|
@ -400,7 +400,7 @@ int mdmon(char *devname, int devnum, int scan, char *switchroot)
|
|||
}
|
||||
|
||||
mdi = sysfs_read(mdfd, container->devnum,
|
||||
GET_VERSION|GET_LEVEL|GET_DEVS);
|
||||
GET_VERSION|GET_LEVEL|GET_DEVS|SKIP_GONE_DEVS);
|
||||
|
||||
if (!mdi) {
|
||||
fprintf(stderr, "mdmon: failed to load sysfs info for %s\n",
|
||||
|
|
Loading…
Reference in New Issue