~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/testing/selftests/zram/zram_lib.sh

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #!/bin/sh
  2 # SPDX-License-Identifier: GPL-2.0-or-later
  3 # Copyright (c) 2015 Oracle and/or its affiliates. All Rights Reserved.
  4 #
  5 # Author: Alexey Kodanev <alexey.kodanev@oracle.com>
  6 # Modified: Naresh Kamboju <naresh.kamboju@linaro.org>
  7 
  8 dev_makeswap=-1
  9 dev_mounted=-1
 10 dev_start=0
 11 dev_end=-1
 12 module_load=-1
 13 sys_control=-1
 14 # Kselftest framework requirement - SKIP code is 4.
 15 ksft_skip=4
 16 kernel_version=`uname -r | cut -d'.' -f1,2`
 17 kernel_major=${kernel_version%.*}
 18 kernel_minor=${kernel_version#*.}
 19 
 20 trap INT
 21 
 22 check_prereqs()
 23 {
 24         local msg="skip all tests:"
 25         local uid=$(id -u)
 26 
 27         if [ $uid -ne 0 ]; then
 28                 echo $msg must be run as root >&2
 29                 exit $ksft_skip
 30         fi
 31 }
 32 
 33 kernel_gte()
 34 {
 35         major=${1%.*}
 36         minor=${1#*.}
 37 
 38         if [ $kernel_major -gt $major ]; then
 39                 return 0
 40         elif [[ $kernel_major -eq $major && $kernel_minor -ge $minor ]]; then
 41                 return 0
 42         fi
 43 
 44         return 1
 45 }
 46 
 47 zram_cleanup()
 48 {
 49         echo "zram cleanup"
 50         local i=
 51         for i in $(seq $dev_start $dev_makeswap); do
 52                 swapoff /dev/zram$i
 53         done
 54 
 55         for i in $(seq $dev_start $dev_mounted); do
 56                 umount /dev/zram$i
 57         done
 58 
 59         for i in $(seq $dev_start $dev_end); do
 60                 echo 1 > /sys/block/zram${i}/reset
 61                 rm -rf zram$i
 62         done
 63 
 64         if [ $sys_control -eq 1 ]; then
 65                 for i in $(seq $dev_start $dev_end); do
 66                         echo $i > /sys/class/zram-control/hot_remove
 67                 done
 68         fi
 69 
 70         if [ $module_load -eq 1 ]; then
 71                 rmmod zram > /dev/null 2>&1
 72         fi
 73 }
 74 
 75 zram_load()
 76 {
 77         echo "create '$dev_num' zram device(s)"
 78 
 79         # zram module loaded, new kernel
 80         if [ -d "/sys/class/zram-control" ]; then
 81                 echo "zram modules already loaded, kernel supports" \
 82                         "zram-control interface"
 83                 dev_start=$(ls /dev/zram* | wc -w)
 84                 dev_end=$(($dev_start + $dev_num - 1))
 85                 sys_control=1
 86 
 87                 for i in $(seq $dev_start $dev_end); do
 88                         cat /sys/class/zram-control/hot_add > /dev/null
 89                 done
 90 
 91                 echo "all zram devices (/dev/zram$dev_start~$dev_end" \
 92                         "successfully created"
 93                 return 0
 94         fi
 95 
 96         # detect old kernel or built-in
 97         modprobe zram num_devices=$dev_num
 98         if [ ! -d "/sys/class/zram-control" ]; then
 99                 if grep -q '^zram' /proc/modules; then
100                         rmmod zram > /dev/null 2>&1
101                         if [ $? -ne 0 ]; then
102                                 echo "zram module is being used on old kernel" \
103                                         "without zram-control interface"
104                                 exit $ksft_skip
105                         fi
106                 else
107                         echo "test needs CONFIG_ZRAM=m on old kernel without" \
108                                 "zram-control interface"
109                         exit $ksft_skip
110                 fi
111                 modprobe zram num_devices=$dev_num
112         fi
113 
114         module_load=1
115         dev_end=$(($dev_num - 1))
116         echo "all zram devices (/dev/zram0~$dev_end) successfully created"
117 }
118 
119 zram_max_streams()
120 {
121         echo "set max_comp_streams to zram device(s)"
122 
123         kernel_gte 4.7
124         if [ $? -eq 0 ]; then
125                 echo "The device attribute max_comp_streams was"\
126                                "deprecated in 4.7"
127                 return 0
128         fi
129 
130         local i=$dev_start
131         for max_s in $zram_max_streams; do
132                 local sys_path="/sys/block/zram${i}/max_comp_streams"
133                 echo $max_s > $sys_path || \
134                         echo "FAIL failed to set '$max_s' to $sys_path"
135                 sleep 1
136                 local max_streams=$(cat $sys_path)
137 
138                 [ "$max_s" -ne "$max_streams" ] && \
139                         echo "FAIL can't set max_streams '$max_s', get $max_stream"
140 
141                 i=$(($i + 1))
142                 echo "$sys_path = '$max_streams'"
143         done
144 
145         echo "zram max streams: OK"
146 }
147 
148 zram_compress_alg()
149 {
150         echo "test that we can set compression algorithm"
151 
152         local i=$dev_start
153         local algs=$(cat /sys/block/zram${i}/comp_algorithm)
154         echo "supported algs: $algs"
155 
156         for alg in $zram_algs; do
157                 local sys_path="/sys/block/zram${i}/comp_algorithm"
158                 echo "$alg" >   $sys_path || \
159                         echo "FAIL can't set '$alg' to $sys_path"
160                 i=$(($i + 1))
161                 echo "$sys_path = '$alg'"
162         done
163 
164         echo "zram set compression algorithm: OK"
165 }
166 
167 zram_set_disksizes()
168 {
169         echo "set disk size to zram device(s)"
170         local i=$dev_start
171         for ds in $zram_sizes; do
172                 local sys_path="/sys/block/zram${i}/disksize"
173                 echo "$ds" >    $sys_path || \
174                         echo "FAIL can't set '$ds' to $sys_path"
175 
176                 i=$(($i + 1))
177                 echo "$sys_path = '$ds'"
178         done
179 
180         echo "zram set disksizes: OK"
181 }
182 
183 zram_set_memlimit()
184 {
185         echo "set memory limit to zram device(s)"
186 
187         local i=$dev_start
188         for ds in $zram_mem_limits; do
189                 local sys_path="/sys/block/zram${i}/mem_limit"
190                 echo "$ds" >    $sys_path || \
191                         echo "FAIL can't set '$ds' to $sys_path"
192 
193                 i=$(($i + 1))
194                 echo "$sys_path = '$ds'"
195         done
196 
197         echo "zram set memory limit: OK"
198 }
199 
200 zram_makeswap()
201 {
202         echo "make swap with zram device(s)"
203         local i=$dev_start
204         for i in $(seq $dev_start $dev_end); do
205                 mkswap /dev/zram$i > err.log 2>&1
206                 if [ $? -ne 0 ]; then
207                         cat err.log
208                         echo "FAIL mkswap /dev/zram$1 failed"
209                 fi
210 
211                 swapon /dev/zram$i > err.log 2>&1
212                 if [ $? -ne 0 ]; then
213                         cat err.log
214                         echo "FAIL swapon /dev/zram$1 failed"
215                 fi
216 
217                 echo "done with /dev/zram$i"
218                 dev_makeswap=$i
219         done
220 
221         echo "zram making zram mkswap and swapon: OK"
222 }
223 
224 zram_swapoff()
225 {
226         local i=
227         for i in $(seq $dev_start $dev_end); do
228                 swapoff /dev/zram$i > err.log 2>&1
229                 if [ $? -ne 0 ]; then
230                         cat err.log
231                         echo "FAIL swapoff /dev/zram$i failed"
232                 fi
233         done
234         dev_makeswap=-1
235 
236         echo "zram swapoff: OK"
237 }
238 
239 zram_makefs()
240 {
241         local i=$dev_start
242         for fs in $zram_filesystems; do
243                 # if requested fs not supported default it to ext2
244                 which mkfs.$fs > /dev/null 2>&1 || fs=ext2
245 
246                 echo "make $fs filesystem on /dev/zram$i"
247                 mkfs.$fs /dev/zram$i > err.log 2>&1
248                 if [ $? -ne 0 ]; then
249                         cat err.log
250                         echo "FAIL failed to make $fs on /dev/zram$i"
251                 fi
252                 i=$(($i + 1))
253                 echo "zram mkfs.$fs: OK"
254         done
255 }
256 
257 zram_mount()
258 {
259         local i=0
260         for i in $(seq $dev_start $dev_end); do
261                 echo "mount /dev/zram$i"
262                 mkdir zram$i
263                 mount /dev/zram$i zram$i > /dev/null || \
264                         echo "FAIL mount /dev/zram$i failed"
265                 dev_mounted=$i
266         done
267 
268         echo "zram mount of zram device(s): OK"
269 }

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php