Wait: also wait if an action is about to start.
If a sync/recover action is about to start but hasn't actually begun yet, /proc/mdstat won't show it, but md/sync_action will (it checks MD_RECOVERY_NEEDED). So when /proc/mdstat seems to say nothing is happening, double check with md/sync_action. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
79b2ed4f24
commit
276be5147e
13
Monitor.c
13
Monitor.c
|
@ -972,6 +972,19 @@ int Wait(char *dev)
|
|||
if (strcmp(e->devnm, devnm) == 0)
|
||||
break;
|
||||
|
||||
if (e->percent == RESYNC_NONE) {
|
||||
/* We could be in the brief pause before something
|
||||
* starts. /proc/mdstat doesn't show that, but
|
||||
* sync_action does.
|
||||
*/
|
||||
struct mdinfo mdi;
|
||||
char buf[21];
|
||||
sysfs_init(&mdi, -1, devnm);
|
||||
if (sysfs_get_str(&mdi, NULL, "sync_action",
|
||||
buf, 20) > 0 &&
|
||||
strcmp(buf,"idle\n") != 0)
|
||||
e->percent = RESYNC_UNKNOWN;
|
||||
}
|
||||
if (!e || e->percent == RESYNC_NONE) {
|
||||
if (e && e->metadata_version &&
|
||||
strncmp(e->metadata_version, "external:", 9) == 0) {
|
||||
|
|
Loading…
Reference in New Issue