From: NeilBrown Date: Wed, 1 May 2013 00:23:40 +0000 (+1000) Subject: Wait: also wait if an action is about to start. X-Git-Tag: mdadm-3.3-rc1~86 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=276be5147ed1ff80a380b50a34ae83f8a1f21b8e;p=thirdparty%2Fmdadm.git 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 --- diff --git a/Monitor.c b/Monitor.c index 607d3ddd..b82e7b6a 100644 --- a/Monitor.c +++ b/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) {