]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
mdadm/tests: test enhance
authorXiao Ni <xni@redhat.com>
Wed, 22 May 2024 08:50:41 +0000 (16:50 +0800)
committerMariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
Fri, 24 May 2024 08:04:23 +0000 (10:04 +0200)
There are two changes.
First, if md module is not loaded, it gives error when reading
speed_limit_max. So read the value after loading md module which
is done in do_setup

Second, sometimes the test reports error sync action doesn't
happen. But dmesg shows sync action is done. So limit the sync
speed before test. It doesn't affect the test run time. Because
check wait sets the max speed before waiting sync action. And
recording speed_limit_max/min in do_setup.

Fixes: 4c12714d1ca0 ('test: run tests on system level mdadm')
Signed-off-by: Xiao Ni <xni@redhat.com>
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
test
tests/func.sh

diff --git a/test b/test
index 338c2db44fa7c82576b4794c397369c8b909547e..ff403293d60b99b48a80eb98c8aa9926c36b6ab0 100755 (executable)
--- a/test
+++ b/test
@@ -6,7 +6,10 @@ targetdir="/var/tmp"
 logdir="$targetdir"
 config=/tmp/mdadm.conf
 testdir=$PWD/tests
-system_speed_limit=`cat /proc/sys/dev/raid/speed_limit_max`
+system_speed_limit_max=0
+system_speed_limit_min=0
+test_speed_limit_min=100
+test_speed_limit_max=500
 devlist=
 
 savelogs=0
@@ -39,10 +42,6 @@ ctrl_c() {
        ctrl_c_error=1
 }
 
-restore_system_speed_limit() {
-       echo $system_speed_limit > /proc/sys/dev/raid/speed_limit_max
-}
-
 mdadm() {
        rm -f $targetdir/stderr
        case $* in
@@ -103,6 +102,7 @@ do_test() {
                do_clean
                # source script in a subshell, so it has access to our
                # namespace, but cannot change it.
+               control_system_speed_limit
                echo -ne "$_script... "
                if ( set -ex ; . $_script ) &> $targetdir/log
                then
index b474442b6abe296b0f9b276f4824492b1d08d144..221cff158f8c2ae0a748a922ff8781475f06f128 100644 (file)
@@ -136,6 +136,23 @@ check_env() {
        fi
 }
 
+record_system_speed_limit() {
+       system_speed_limit_max=`cat /proc/sys/dev/raid/speed_limit_max`
+       system_speed_limit_min=`cat /proc/sys/dev/raid/speed_limit_min`
+}
+
+# To avoid sync action finishes before checking it, it needs to limit
+# the sync speed
+control_system_speed_limit() {
+       echo $test_speed_limit_min > /proc/sys/dev/raid/speed_limit_min
+       echo $test_speed_limit_max > /proc/sys/dev/raid/speed_limit_max
+}
+
+restore_system_speed_limit() {
+       echo $system_speed_limit_min > /proc/sys/dev/raid/speed_limit_max
+       echo $system_speed_limit_max > /proc/sys/dev/raid/speed_limit_max
+}
+
 do_setup() {
        trap cleanup 0 1 3 15
        trap ctrl_c 2
@@ -214,6 +231,7 @@ do_setup() {
        ulimit -c unlimited
        [ -f /proc/mdstat ] || modprobe md_mod
        echo 0 > /sys/module/md_mod/parameters/start_ro
+       record_system_speed_limit
 }
 
 # check various things
@@ -265,15 +283,17 @@ check() {
                fi
        ;;
        wait )
-               p=`cat /proc/sys/dev/raid/speed_limit_max`
-               echo 2000000 > /proc/sys/dev/raid/speed_limit_max
+               min=`cat /proc/sys/dev/raid/speed_limit_min`
+               max=`cat /proc/sys/dev/raid/speed_limit_max`
+               echo 200000 > /proc/sys/dev/raid/speed_limit_max
                sleep 0.1
                while grep -Eq '(resync|recovery|reshape|check|repair) *=' /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
+               echo $min > /proc/sys/dev/raid/speed_limit_min
+               echo $max > /proc/sys/dev/raid/speed_limit_max
        ;;
        state )
                grep -sq "blocks.*\[$2\]\$" /proc/mdstat ||