0001
0002
0003
0004
0005
0006
0007
0008 dev_makeswap=-1
0009 dev_mounted=-1
0010 dev_start=0
0011 dev_end=-1
0012 module_load=-1
0013 sys_control=-1
0014
0015 ksft_skip=4
0016 kernel_version=`uname -r | cut -d'.' -f1,2`
0017 kernel_major=${kernel_version%.*}
0018 kernel_minor=${kernel_version
0019
0020 trap INT
0021
0022 check_prereqs()
0023 {
0024 local msg="skip all tests:"
0025 local uid=$(id -u)
0026
0027 if [ $uid -ne 0 ]; then
0028 echo $msg must be run as root >&2
0029 exit $ksft_skip
0030 fi
0031 }
0032
0033 kernel_gte()
0034 {
0035 major=${1%.*}
0036 minor=${1
0037
0038 if [ $kernel_major -gt $major ]; then
0039 return 0
0040 elif [[ $kernel_major -eq $major && $kernel_minor -ge $minor ]]; then
0041 return 0
0042 fi
0043
0044 return 1
0045 }
0046
0047 zram_cleanup()
0048 {
0049 echo "zram cleanup"
0050 local i=
0051 for i in $(seq $dev_start $dev_makeswap); do
0052 swapoff /dev/zram$i
0053 done
0054
0055 for i in $(seq $dev_start $dev_mounted); do
0056 umount /dev/zram$i
0057 done
0058
0059 for i in $(seq $dev_start $dev_end); do
0060 echo 1 > /sys/block/zram${i}/reset
0061 rm -rf zram$i
0062 done
0063
0064 if [ $sys_control -eq 1 ]; then
0065 for i in $(seq $dev_start $dev_end); do
0066 echo $i > /sys/class/zram-control/hot_remove
0067 done
0068 fi
0069
0070 if [ $module_load -eq 1 ]; then
0071 rmmod zram > /dev/null 2>&1
0072 fi
0073 }
0074
0075 zram_load()
0076 {
0077 echo "create '$dev_num' zram device(s)"
0078
0079
0080 if [ -d "/sys/class/zram-control" ]; then
0081 echo "zram modules already loaded, kernel supports" \
0082 "zram-control interface"
0083 dev_start=$(ls /dev/zram* | wc -w)
0084 dev_end=$(($dev_start + $dev_num - 1))
0085 sys_control=1
0086
0087 for i in $(seq $dev_start $dev_end); do
0088 cat /sys/class/zram-control/hot_add > /dev/null
0089 done
0090
0091 echo "all zram devices (/dev/zram$dev_start~$dev_end" \
0092 "successfully created"
0093 return 0
0094 fi
0095
0096
0097 modprobe zram num_devices=$dev_num
0098 if [ ! -d "/sys/class/zram-control" ]; then
0099 if grep -q '^zram' /proc/modules; then
0100 rmmod zram > /dev/null 2>&1
0101 if [ $? -ne 0 ]; then
0102 echo "zram module is being used on old kernel" \
0103 "without zram-control interface"
0104 exit $ksft_skip
0105 fi
0106 else
0107 echo "test needs CONFIG_ZRAM=m on old kernel without" \
0108 "zram-control interface"
0109 exit $ksft_skip
0110 fi
0111 modprobe zram num_devices=$dev_num
0112 fi
0113
0114 module_load=1
0115 dev_end=$(($dev_num - 1))
0116 echo "all zram devices (/dev/zram0~$dev_end) successfully created"
0117 }
0118
0119 zram_max_streams()
0120 {
0121 echo "set max_comp_streams to zram device(s)"
0122
0123 kernel_gte 4.7
0124 if [ $? -eq 0 ]; then
0125 echo "The device attribute max_comp_streams was"\
0126 "deprecated in 4.7"
0127 return 0
0128 fi
0129
0130 local i=$dev_start
0131 for max_s in $zram_max_streams; do
0132 local sys_path="/sys/block/zram${i}/max_comp_streams"
0133 echo $max_s > $sys_path || \
0134 echo "FAIL failed to set '$max_s' to $sys_path"
0135 sleep 1
0136 local max_streams=$(cat $sys_path)
0137
0138 [ "$max_s" -ne "$max_streams" ] && \
0139 echo "FAIL can't set max_streams '$max_s', get $max_stream"
0140
0141 i=$(($i + 1))
0142 echo "$sys_path = '$max_streams'"
0143 done
0144
0145 echo "zram max streams: OK"
0146 }
0147
0148 zram_compress_alg()
0149 {
0150 echo "test that we can set compression algorithm"
0151
0152 local i=$dev_start
0153 local algs=$(cat /sys/block/zram${i}/comp_algorithm)
0154 echo "supported algs: $algs"
0155
0156 for alg in $zram_algs; do
0157 local sys_path="/sys/block/zram${i}/comp_algorithm"
0158 echo "$alg" > $sys_path || \
0159 echo "FAIL can't set '$alg' to $sys_path"
0160 i=$(($i + 1))
0161 echo "$sys_path = '$alg'"
0162 done
0163
0164 echo "zram set compression algorithm: OK"
0165 }
0166
0167 zram_set_disksizes()
0168 {
0169 echo "set disk size to zram device(s)"
0170 local i=$dev_start
0171 for ds in $zram_sizes; do
0172 local sys_path="/sys/block/zram${i}/disksize"
0173 echo "$ds" > $sys_path || \
0174 echo "FAIL can't set '$ds' to $sys_path"
0175
0176 i=$(($i + 1))
0177 echo "$sys_path = '$ds'"
0178 done
0179
0180 echo "zram set disksizes: OK"
0181 }
0182
0183 zram_set_memlimit()
0184 {
0185 echo "set memory limit to zram device(s)"
0186
0187 local i=$dev_start
0188 for ds in $zram_mem_limits; do
0189 local sys_path="/sys/block/zram${i}/mem_limit"
0190 echo "$ds" > $sys_path || \
0191 echo "FAIL can't set '$ds' to $sys_path"
0192
0193 i=$(($i + 1))
0194 echo "$sys_path = '$ds'"
0195 done
0196
0197 echo "zram set memory limit: OK"
0198 }
0199
0200 zram_makeswap()
0201 {
0202 echo "make swap with zram device(s)"
0203 local i=$dev_start
0204 for i in $(seq $dev_start $dev_end); do
0205 mkswap /dev/zram$i > err.log 2>&1
0206 if [ $? -ne 0 ]; then
0207 cat err.log
0208 echo "FAIL mkswap /dev/zram$1 failed"
0209 fi
0210
0211 swapon /dev/zram$i > err.log 2>&1
0212 if [ $? -ne 0 ]; then
0213 cat err.log
0214 echo "FAIL swapon /dev/zram$1 failed"
0215 fi
0216
0217 echo "done with /dev/zram$i"
0218 dev_makeswap=$i
0219 done
0220
0221 echo "zram making zram mkswap and swapon: OK"
0222 }
0223
0224 zram_swapoff()
0225 {
0226 local i=
0227 for i in $(seq $dev_start $dev_end); do
0228 swapoff /dev/zram$i > err.log 2>&1
0229 if [ $? -ne 0 ]; then
0230 cat err.log
0231 echo "FAIL swapoff /dev/zram$i failed"
0232 fi
0233 done
0234 dev_makeswap=-1
0235
0236 echo "zram swapoff: OK"
0237 }
0238
0239 zram_makefs()
0240 {
0241 local i=$dev_start
0242 for fs in $zram_filesystems; do
0243
0244 which mkfs.$fs > /dev/null 2>&1 || fs=ext2
0245
0246 echo "make $fs filesystem on /dev/zram$i"
0247 mkfs.$fs /dev/zram$i > err.log 2>&1
0248 if [ $? -ne 0 ]; then
0249 cat err.log
0250 echo "FAIL failed to make $fs on /dev/zram$i"
0251 fi
0252 i=$(($i + 1))
0253 echo "zram mkfs.$fs: OK"
0254 done
0255 }
0256
0257 zram_mount()
0258 {
0259 local i=0
0260 for i in $(seq $dev_start $dev_end); do
0261 echo "mount /dev/zram$i"
0262 mkdir zram$i
0263 mount /dev/zram$i zram$i > /dev/null || \
0264 echo "FAIL mount /dev/zram$i failed"
0265 dev_mounted=$i
0266 done
0267
0268 echo "zram mount of zram device(s): OK"
0269 }