From 276be5147ed1ff80a380b50a34ae83f8a1f21b8e Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Wed, 1 May 2013 10:23:40 +1000 Subject: [PATCH] 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 --- Monitor.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Monitor.c b/Monitor.c index 607d3dd..b82e7b6 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) {