]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
test: check sync_action as well when checking for an action.
authorNeilBrown <neilb@suse.de>
Mon, 6 Jul 2015 03:58:19 +0000 (13:58 +1000)
committerNeilBrown <neilb@suse.de>
Mon, 6 Jul 2015 03:58:19 +0000 (13:58 +1000)
Some actions only appear in /proc/mdstat after a little delay,
so check in sync_action as well.

This applies when checking for recovery etc, and when waiting for idle.

Signed-off-by: NeilBrown <neilb@suse.de>
test

diff --git a/test b/test
index 0e168ff10ec55e97240d1b2bdc1df6393c56d0cb..6f79c3ad176b71778249af4b8a14c4ca799b59e6 100755 (executable)
--- a/test
+++ b/test
@@ -188,10 +188,18 @@ check() {
          echo >&2 "ERROR algorithm $2 not found"; cat /proc/mdstat; exit 1;}
      ;;
     resync | recovery | reshape)
-      sleep 0.5
-      grep -s $1 /proc/mdstat > /dev/null || {
-               echo >&2 ERROR no $1 happening; cat /proc/mdstat; exit 1; }
-     ;;
+       cnt=5
+       while ! grep -s $1 /proc/mdstat > /dev/null
+       do
+           if [ $cnt -gt 0 ] && grep -v idle /sys/block/md*/md/sync_action > /dev/null
+           then # Something isn't idle - wait a bit
+               sleep 0.5
+               cnt=$[cnt-1]
+           else
+               echo >&2 ERROR no $1 happening; cat /proc/mdstat; exit 1
+           fi
+       done
+       ;;
 
      nosync )
        sleep 0.5
@@ -204,7 +212,8 @@ check() {
       p=`cat /proc/sys/dev/raid/speed_limit_max`
       echo 2000000 > /proc/sys/dev/raid/speed_limit_max
       sleep 0.1
-      while grep -E '(resync|recovery|reshape|check|repair) *=' > /dev/null /proc/mdstat /sys/block/md*/md/sync_action
+      while grep -E '(resync|recovery|reshape|check|repair) *=' > /dev/null /proc/mdstat ||
+             grep -v idle > /dev/null /sys/block/md*/md/sync_action
       do sleep 0.5;
       done
       echo $p > /proc/sys/dev/raid/speed_limit_max