[LTP] [PATCH v4 2/4] zram/zram_lib.sh: adapt the situation that zram device is being used
Yang Xu
xuyang2018.jy@fujitsu.com
Wed Dec 15 08:20:47 CET 2021
If zram-generator package is installed and works, then we can not remove zram module
because zram swap is being used. This case needs a clean zram environment, change this
test by using hot_add/hot_remove interface[1]. So even zram device is being used, we
still can add zram device and remove them in cleanup.
Also, zram01,02 case are adjuested to adapt the situation that CONFIG_ZRAM=y.
1]https://www.kernel.org/doc/html/latest/admin-guide/blockdev/zram.html#add-remove-zram-devices
Fixes: #888
Signed-off-by: Yang Xu <xuyang2018.jy@fujitsu.com>
---
.../kernel/device-drivers/zram/zram01.sh | 6 +-
.../kernel/device-drivers/zram/zram02.sh | 4 +-
.../kernel/device-drivers/zram/zram_lib.sh | 60 ++++++++++++-------
3 files changed, 42 insertions(+), 28 deletions(-)
diff --git a/testcases/kernel/device-drivers/zram/zram01.sh b/testcases/kernel/device-drivers/zram/zram01.sh
index ad9a9a2be..5e13f387c 100755
--- a/testcases/kernel/device-drivers/zram/zram01.sh
+++ b/testcases/kernel/device-drivers/zram/zram01.sh
@@ -69,7 +69,7 @@ setup()
zram_makefs()
{
- local i=0
+ local i=$dev_start
local fs
for fs in $zram_filesystems; do
@@ -90,7 +90,7 @@ zram_mount()
{
local i=0
- for i in $(seq 0 $(($dev_num - 1))); do
+ for i in $(seq $dev_start $dev_end); do
tst_res TINFO "mount /dev/zram$i"
mkdir zram$i
ROD mount /dev/zram$i zram$i
@@ -102,7 +102,7 @@ zram_mount()
zram_fill_fs()
{
- for i in $(seq 0 $(($dev_num - 1))); do
+ for i in $(seq $dev_start $dev_end); do
tst_res TINFO "filling zram$i (it can take long time)"
local b=0
while true; do
diff --git a/testcases/kernel/device-drivers/zram/zram02.sh b/testcases/kernel/device-drivers/zram/zram02.sh
index f0421ce7f..c980fce76 100755
--- a/testcases/kernel/device-drivers/zram/zram02.sh
+++ b/testcases/kernel/device-drivers/zram/zram02.sh
@@ -29,7 +29,7 @@ zram_makeswap()
tst_require_cmds mkswap swapon swapoff
local i=0
- for i in $(seq 0 $(($dev_num - 1))); do
+ for i in $(seq $dev_start $dev_end); do
ROD mkswap /dev/zram$i
ROD swapon /dev/zram$i
tst_res TINFO "done with /dev/zram$i"
@@ -44,7 +44,7 @@ zram_swapoff()
tst_require_cmds swapoff
local i
- for i in $(seq 0 $dev_makeswap); do
+ for i in $(seq $dev_start $dev_end); do
ROD swapoff /dev/zram$i
done
dev_makeswap=-1
diff --git a/testcases/kernel/device-drivers/zram/zram_lib.sh b/testcases/kernel/device-drivers/zram/zram_lib.sh
index fe9c915c3..db9552501 100755
--- a/testcases/kernel/device-drivers/zram/zram_lib.sh
+++ b/testcases/kernel/device-drivers/zram/zram_lib.sh
@@ -5,6 +5,9 @@
dev_makeswap=-1
dev_mounted=-1
+dev_start=-1
+dev_end=-1
+module_load=-1
TST_NEEDS_TMPDIR=1
TST_NEEDS_ROOT=1
@@ -17,19 +20,25 @@ zram_cleanup()
{
local i
- for i in $(seq 0 $dev_makeswap); do
+ for i in $(seq $dev_start $dev_makeswap); do
swapoff /dev/zram$i
done
- for i in $(seq 0 $dev_mounted); do
+ for i in $(seq $dev_start $dev_mounted); do
umount /dev/zram$i
done
- for i in $(seq 0 $(($dev_num - 1))); do
+ for i in $(seq $dev_start $dev_end); do
echo 1 > /sys/block/zram${i}/reset
done
- rmmod zram > /dev/null 2>&1
+ for i in $(seq $dev_start $dev_end); do
+ echo $i > /sys/class/zram-control/hot_remove
+ done
+
+ if [ $module_load -eq 1 ]; then
+ rmmod zram > /dev/null 2>&1
+ fi
}
zram_load()
@@ -51,16 +60,23 @@ zram_load()
tst_res TINFO "create '$dev_num' zram device(s)"
- modprobe zram num_devices=$dev_num || \
- tst_brk TBROK "failed to insert zram module"
+ if [ ! -d "/sys/class/zram-control" ]; then
+ modprobe zram num_devices=$dev_num
+ module_load=1
+ dev_start=0
+ dev_end=$(($dev_num - 1))
+ tst_res TPASS "all zram devices(/dev/zram0~$dev_end) successfully created"
+ return
+ fi
- dev_num_created=$(ls /dev/zram* | wc -w)
+ dev_start=$(ls /dev/zram* | wc -w)
+ dev_end=$(($dev_start + $dev_num - 1))
- if [ "$dev_num_created" -ne "$dev_num" ]; then
- tst_brk TFAIL "unexpected num of devices: $dev_num_created"
- fi
+ for i in $(seq $dev_start $dev_end); do
+ cat /sys/class/zram-control/hot_add > /dev/null
+ done
- tst_res TPASS "all zram devices successfully created"
+ tst_res TPASS "all zram devices(/dev/zram$dev_start~$dev_end) successfully created"
}
zram_max_streams()
@@ -73,7 +89,7 @@ zram_max_streams()
tst_res TINFO "set max_comp_streams to zram device(s)"
- local i=0
+ local i=$dev_start
for max_s in $zram_max_streams; do
local sys_path="/sys/block/zram${i}/max_comp_streams"
@@ -85,7 +101,7 @@ zram_max_streams()
tst_brk TFAIL "can't set max_streams '$max_s', get $max_stream"
i=$(($i + 1))
- tst_res TINFO "$sys_path = '$max_streams' ($i/$dev_num)"
+ tst_res TINFO "$sys_path = '$max_streams'"
done
tst_res TPASS "test succeeded"
@@ -100,20 +116,18 @@ zram_compress_alg()
return
fi
- local i=0
+ local i=$dev_start
tst_res TINFO "test that we can set compression algorithm"
- local algs="$(sed 's/[][]//g' /sys/block/zram0/comp_algorithm)"
+ local algs="$(sed 's/[][]//g' /sys/block/zram${i}/comp_algorithm)"
tst_res TINFO "supported algs: $algs"
- local dev_max=$(($dev_num - 1))
-
- for i in $(seq 0 $dev_max); do
+ for i in $(seq $dev_start $dev_end); do
for alg in $algs; do
local sys_path="/sys/block/zram${i}/comp_algorithm"
echo "$alg" > $sys_path || \
tst_brk TFAIL "can't set '$alg' to $sys_path"
- tst_res TINFO "$sys_path = '$alg' ($i/$dev_max)"
+ tst_res TINFO "$sys_path = '$alg'"
done
done
@@ -122,7 +136,7 @@ zram_compress_alg()
zram_set_disksizes()
{
- local i=0
+ local i=$dev_start
local ds
tst_res TINFO "set disk size to zram device(s)"
@@ -132,7 +146,7 @@ zram_set_disksizes()
tst_brk TFAIL "can't set '$ds' to $sys_path"
i=$(($i + 1))
- tst_res TINFO "$sys_path = '$ds' ($i/$dev_num)"
+ tst_res TINFO "$sys_path = '$ds'"
done
tst_res TPASS "test succeeded"
@@ -147,7 +161,7 @@ zram_set_memlimit()
return
fi
- local i=0
+ local i=$dev_start
local ds
tst_res TINFO "set memory limit to zram device(s)"
@@ -158,7 +172,7 @@ zram_set_memlimit()
tst_brk TFAIL "can't set '$ds' to $sys_path"
i=$(($i + 1))
- tst_res TINFO "$sys_path = '$ds' ($i/$dev_num)"
+ tst_res TINFO "$sys_path = '$ds'"
done
tst_res TPASS "test succeeded"
--
2.23.0
More information about the ltp
mailing list