You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
3.4 KiB
120 lines
3.4 KiB
From 6e8af9475cf0ac22f7ac167040dbf92fbfdd97ab Mon Sep 17 00:00:00 2001
|
|
From: Xiao Ni <xni@redhat.com>
|
|
Date: Wed, 22 May 2024 16:50:41 +0800
|
|
Subject: [PATCH 079/157] mdadm/tests: test enhance
|
|
|
|
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 | 10 +++++-----
|
|
tests/func.sh | 26 +++++++++++++++++++++++---
|
|
2 files changed, 28 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/test b/test
|
|
index 338c2db4..ff403293 100755
|
|
--- 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
|
|
diff --git a/tests/func.sh b/tests/func.sh
|
|
index b474442b..221cff15 100644
|
|
--- a/tests/func.sh
|
|
+++ b/tests/func.sh
|
|
@@ -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 ||
|
|
--
|
|
2.41.0
|
|
|