2015-08-18 12:31:59 +05:30
#!/bin/sh
2019-05-19 15:51:55 +02:00
# SPDX-License-Identifier: GPL-2.0-or-later
2015-08-18 12:31:59 +05:30
# Copyright (c) 2015 Oracle and/or its affiliates. All Rights Reserved.
#
# Author: Alexey Kodanev <alexey.kodanev@oracle.com>
# Modified: Naresh Kamboju <naresh.kamboju@linaro.org>
dev_makeswap = -1
dev_mounted = -1
2022-01-27 17:11:37 +08:00
dev_start = 0
dev_end = -1
module_load = -1
sys_control = -1
2018-06-14 16:56:13 -06:00
# Kselftest framework requirement - SKIP code is 4.
ksft_skip = 4
2022-01-27 17:11:35 +08:00
kernel_version = ` uname -r | cut -d'.' -f1,2`
kernel_major = ${ kernel_version %.* }
kernel_minor = ${ kernel_version #*. }
2018-06-14 16:56:13 -06:00
2015-08-18 12:31:59 +05:30
trap INT
2015-08-31 17:11:55 +05:30
check_prereqs( )
{
local msg = "skip all tests:"
2015-09-14 12:13:27 +08:00
local uid = $( id -u)
2015-08-31 17:11:55 +05:30
2015-09-14 12:13:27 +08:00
if [ $uid -ne 0 ] ; then
2015-08-31 17:11:55 +05:30
echo $msg must be run as root >& 2
2018-06-14 16:56:13 -06:00
exit $ksft_skip
2015-08-31 17:11:55 +05:30
fi
}
2022-01-27 17:11:35 +08:00
kernel_gte( )
{
major = ${ 1 %.* }
minor = ${ 1 #*. }
if [ $kernel_major -gt $major ] ; then
return 0
elif [ [ $kernel_major -eq $major && $kernel_minor -ge $minor ] ] ; then
return 0
fi
return 1
}
2015-08-18 12:31:59 +05:30
zram_cleanup( )
{
echo "zram cleanup"
local i =
2022-01-27 17:11:37 +08:00
for i in $( seq $dev_start $dev_makeswap ) ; do
2015-08-18 12:31:59 +05:30
swapoff /dev/zram$i
done
2022-01-27 17:11:37 +08:00
for i in $( seq $dev_start $dev_mounted ) ; do
2015-08-18 12:31:59 +05:30
umount /dev/zram$i
done
2022-01-27 17:11:37 +08:00
for i in $( seq $dev_start $dev_end ) ; do
2015-08-18 12:31:59 +05:30
echo 1 > /sys/block/zram${ i } /reset
rm -rf zram$i
done
2022-01-27 17:11:37 +08:00
if [ $sys_control -eq 1 ] ; then
for i in $( seq $dev_start $dev_end ) ; do
echo $i > /sys/class/zram-control/hot_remove
done
fi
2015-08-18 12:31:59 +05:30
2022-01-27 17:11:37 +08:00
if [ $module_load -eq 1 ] ; then
2015-08-18 12:31:59 +05:30
rmmod zram > /dev/null 2>& 1
fi
}
zram_load( )
{
2022-01-27 17:11:37 +08:00
echo " create ' $dev_num ' zram device(s) "
# zram module loaded, new kernel
if [ -d "/sys/class/zram-control" ] ; then
echo "zram modules already loaded, kernel supports" \
"zram-control interface"
dev_start = $( ls /dev/zram* | wc -w)
dev_end = $(( $dev_start + $dev_num - 1 ))
sys_control = 1
for i in $( seq $dev_start $dev_end ) ; do
cat /sys/class/zram-control/hot_add > /dev/null
done
echo " all zram devices (/dev/zram $dev_start ~ $dev_end " \
"successfully created"
return 0
fi
2015-08-18 12:31:59 +05:30
2022-01-27 17:11:37 +08:00
# detect old kernel or built-in
modprobe zram num_devices = $dev_num
if [ ! -d "/sys/class/zram-control" ] ; then
if grep -q '^zram' /proc/modules; then
rmmod zram > /dev/null 2>& 1
if [ $? -ne 0 ] ; then
echo "zram module is being used on old kernel" \
"without zram-control interface"
exit $ksft_skip
fi
2015-08-18 12:31:59 +05:30
else
2022-01-27 17:11:37 +08:00
echo "test needs CONFIG_ZRAM=m on old kernel without" \
"zram-control interface"
exit $ksft_skip
2015-08-18 12:31:59 +05:30
fi
2022-01-27 17:11:37 +08:00
modprobe zram num_devices = $dev_num
2015-08-18 12:31:59 +05:30
fi
2022-01-27 17:11:37 +08:00
module_load = 1
dev_end = $(( $dev_num - 1 ))
echo " all zram devices (/dev/zram0~ $dev_end ) successfully created "
2015-08-18 12:31:59 +05:30
}
zram_max_streams( )
{
echo "set max_comp_streams to zram device(s)"
2022-01-27 17:11:35 +08:00
kernel_gte 4.7
if [ $? -eq 0 ] ; then
echo "The device attribute max_comp_streams was" \
"deprecated in 4.7"
return 0
fi
2022-01-27 17:11:37 +08:00
local i = $dev_start
2015-08-18 12:31:59 +05:30
for max_s in $zram_max_streams ; do
local sys_path = " /sys/block/zram ${ i } /max_comp_streams "
echo $max_s > $sys_path || \
echo " FAIL failed to set ' $max_s ' to $sys_path "
sleep 1
local max_streams = $( cat $sys_path )
[ " $max_s " -ne " $max_streams " ] && \
echo " FAIL can't set max_streams ' $max_s ', get $max_stream "
i = $(( $i + 1 ))
2022-01-27 17:11:37 +08:00
echo " $sys_path = ' $max_streams ' "
2015-08-18 12:31:59 +05:30
done
echo "zram max streams: OK"
}
zram_compress_alg( )
{
echo "test that we can set compression algorithm"
2022-01-27 17:11:37 +08:00
local i = $dev_start
local algs = $( cat /sys/block/zram${ i } /comp_algorithm)
2015-08-18 12:31:59 +05:30
echo " supported algs: $algs "
2022-01-27 17:11:37 +08:00
2015-08-18 12:31:59 +05:30
for alg in $zram_algs ; do
local sys_path = " /sys/block/zram ${ i } /comp_algorithm "
echo " $alg " > $sys_path || \
echo " FAIL can't set ' $alg ' to $sys_path "
i = $(( $i + 1 ))
2022-01-27 17:11:37 +08:00
echo " $sys_path = ' $alg ' "
2015-08-18 12:31:59 +05:30
done
echo "zram set compression algorithm: OK"
}
zram_set_disksizes( )
{
echo "set disk size to zram device(s)"
2022-01-27 17:11:37 +08:00
local i = $dev_start
2015-08-18 12:31:59 +05:30
for ds in $zram_sizes ; do
local sys_path = " /sys/block/zram ${ i } /disksize "
echo " $ds " > $sys_path || \
echo " FAIL can't set ' $ds ' to $sys_path "
i = $(( $i + 1 ))
2022-01-27 17:11:37 +08:00
echo " $sys_path = ' $ds ' "
2015-08-18 12:31:59 +05:30
done
echo "zram set disksizes: OK"
}
zram_set_memlimit( )
{
echo "set memory limit to zram device(s)"
2022-01-27 17:11:37 +08:00
local i = $dev_start
2015-08-18 12:31:59 +05:30
for ds in $zram_mem_limits ; do
local sys_path = " /sys/block/zram ${ i } /mem_limit "
echo " $ds " > $sys_path || \
echo " FAIL can't set ' $ds ' to $sys_path "
i = $(( $i + 1 ))
2022-01-27 17:11:37 +08:00
echo " $sys_path = ' $ds ' "
2015-08-18 12:31:59 +05:30
done
echo "zram set memory limit: OK"
}
zram_makeswap( )
{
echo "make swap with zram device(s)"
2022-01-27 17:11:37 +08:00
local i = $dev_start
for i in $( seq $dev_start $dev_end ) ; do
2015-08-18 12:31:59 +05:30
mkswap /dev/zram$i > err.log 2>& 1
if [ $? -ne 0 ] ; then
cat err.log
echo " FAIL mkswap /dev/zram $1 failed "
fi
swapon /dev/zram$i > err.log 2>& 1
if [ $? -ne 0 ] ; then
cat err.log
echo " FAIL swapon /dev/zram $1 failed "
fi
echo " done with /dev/zram $i "
dev_makeswap = $i
done
echo "zram making zram mkswap and swapon: OK"
}
zram_swapoff( )
{
local i =
2022-01-27 17:11:37 +08:00
for i in $( seq $dev_start $dev_end ) ; do
2015-08-18 12:31:59 +05:30
swapoff /dev/zram$i > err.log 2>& 1
if [ $? -ne 0 ] ; then
cat err.log
echo " FAIL swapoff /dev/zram $i failed "
fi
done
dev_makeswap = -1
echo "zram swapoff: OK"
}
zram_makefs( )
{
2022-01-27 17:11:37 +08:00
local i = $dev_start
2015-08-18 12:31:59 +05:30
for fs in $zram_filesystems ; do
# if requested fs not supported default it to ext2
which mkfs.$fs > /dev/null 2>& 1 || fs = ext2
echo " make $fs filesystem on /dev/zram $i "
mkfs.$fs /dev/zram$i > err.log 2>& 1
if [ $? -ne 0 ] ; then
cat err.log
echo " FAIL failed to make $fs on /dev/zram $i "
fi
i = $(( $i + 1 ))
echo " zram mkfs. $fs : OK "
done
}
zram_mount( )
{
local i = 0
2022-01-27 17:11:37 +08:00
for i in $( seq $dev_start $dev_end ) ; do
2015-08-18 12:31:59 +05:30
echo " mount /dev/zram $i "
mkdir zram$i
mount /dev/zram$i zram$i > /dev/null || \
echo " FAIL mount /dev/zram $i failed "
dev_mounted = $i
done
echo "zram mount of zram device(s): OK"
}