1#!/bin/sh 2# Copyright (c) 2015 Oracle and/or its affiliates. All Rights Reserved. 3# 4# This program is free software; you can redistribute it and/or 5# modify it under the terms of the GNU General Public License as 6# published by the Free Software Foundation; either version 2 of 7# the License, or (at your option) any later version. 8# 9# This program is distributed in the hope that it would be useful, 10# but WITHOUT ANY WARRANTY; without even the implied warranty of 11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12# GNU General Public License for more details. 13# 14# Author: Alexey Kodanev <alexey.kodanev@oracle.com> 15# Modified: Naresh Kamboju <naresh.kamboju@linaro.org> 16 17MODULE=0 18dev_makeswap=-1 19dev_mounted=-1 20 21trap INT 22 23check_prereqs() 24{ 25 local msg="skip all tests:" 26 27 if [ $UID != 0 ]; then 28 echo $msg must be run as root >&2 29 exit 0 30 fi 31} 32 33zram_cleanup() 34{ 35 echo "zram cleanup" 36 local i= 37 for i in $(seq 0 $dev_makeswap); do 38 swapoff /dev/zram$i 39 done 40 41 for i in $(seq 0 $dev_mounted); do 42 umount /dev/zram$i 43 done 44 45 for i in $(seq 0 $(($dev_num - 1))); do 46 echo 1 > /sys/block/zram${i}/reset 47 rm -rf zram$i 48 done 49 50} 51 52zram_unload() 53{ 54 if [ $MODULE -ne 0 ] ; then 55 echo "zram rmmod zram" 56 rmmod zram > /dev/null 2>&1 57 fi 58} 59 60zram_load() 61{ 62 # check zram module exists 63 MODULE_PATH=/lib/modules/`uname -r`/kernel/drivers/block/zram/zram.ko 64 if [ -f $MODULE_PATH ]; then 65 MODULE=1 66 echo "create '$dev_num' zram device(s)" 67 modprobe zram num_devices=$dev_num 68 if [ $? -ne 0 ]; then 69 echo "failed to insert zram module" 70 exit 1 71 fi 72 73 dev_num_created=$(ls /dev/zram* | wc -w) 74 75 if [ "$dev_num_created" -ne "$dev_num" ]; then 76 echo "unexpected num of devices: $dev_num_created" 77 ERR_CODE=-1 78 else 79 echo "zram load module successful" 80 fi 81 elif [ -b /dev/zram0 ]; then 82 echo "/dev/zram0 device file found: OK" 83 else 84 echo "ERROR: No zram.ko module or no /dev/zram0 device found" 85 echo "$TCID : CONFIG_ZRAM is not set" 86 exit 1 87 fi 88} 89 90zram_max_streams() 91{ 92 echo "set max_comp_streams to zram device(s)" 93 94 local i=0 95 for max_s in $zram_max_streams; do 96 local sys_path="/sys/block/zram${i}/max_comp_streams" 97 echo $max_s > $sys_path || \ 98 echo "FAIL failed to set '$max_s' to $sys_path" 99 sleep 1 100 local max_streams=$(cat $sys_path) 101 102 [ "$max_s" -ne "$max_streams" ] && \ 103 echo "FAIL can't set max_streams '$max_s', get $max_stream" 104 105 i=$(($i + 1)) 106 echo "$sys_path = '$max_streams' ($i/$dev_num)" 107 done 108 109 echo "zram max streams: OK" 110} 111 112zram_compress_alg() 113{ 114 echo "test that we can set compression algorithm" 115 116 local algs=$(cat /sys/block/zram0/comp_algorithm) 117 echo "supported algs: $algs" 118 local i=0 119 for alg in $zram_algs; do 120 local sys_path="/sys/block/zram${i}/comp_algorithm" 121 echo "$alg" > $sys_path || \ 122 echo "FAIL can't set '$alg' to $sys_path" 123 i=$(($i + 1)) 124 echo "$sys_path = '$alg' ($i/$dev_num)" 125 done 126 127 echo "zram set compression algorithm: OK" 128} 129 130zram_set_disksizes() 131{ 132 echo "set disk size to zram device(s)" 133 local i=0 134 for ds in $zram_sizes; do 135 local sys_path="/sys/block/zram${i}/disksize" 136 echo "$ds" > $sys_path || \ 137 echo "FAIL can't set '$ds' to $sys_path" 138 139 i=$(($i + 1)) 140 echo "$sys_path = '$ds' ($i/$dev_num)" 141 done 142 143 echo "zram set disksizes: OK" 144} 145 146zram_set_memlimit() 147{ 148 echo "set memory limit to zram device(s)" 149 150 local i=0 151 for ds in $zram_mem_limits; do 152 local sys_path="/sys/block/zram${i}/mem_limit" 153 echo "$ds" > $sys_path || \ 154 echo "FAIL can't set '$ds' to $sys_path" 155 156 i=$(($i + 1)) 157 echo "$sys_path = '$ds' ($i/$dev_num)" 158 done 159 160 echo "zram set memory limit: OK" 161} 162 163zram_makeswap() 164{ 165 echo "make swap with zram device(s)" 166 local i=0 167 for i in $(seq 0 $(($dev_num - 1))); do 168 mkswap /dev/zram$i > err.log 2>&1 169 if [ $? -ne 0 ]; then 170 cat err.log 171 echo "FAIL mkswap /dev/zram$1 failed" 172 fi 173 174 swapon /dev/zram$i > err.log 2>&1 175 if [ $? -ne 0 ]; then 176 cat err.log 177 echo "FAIL swapon /dev/zram$1 failed" 178 fi 179 180 echo "done with /dev/zram$i" 181 dev_makeswap=$i 182 done 183 184 echo "zram making zram mkswap and swapon: OK" 185} 186 187zram_swapoff() 188{ 189 local i= 190 for i in $(seq 0 $dev_makeswap); do 191 swapoff /dev/zram$i > err.log 2>&1 192 if [ $? -ne 0 ]; then 193 cat err.log 194 echo "FAIL swapoff /dev/zram$i failed" 195 fi 196 done 197 dev_makeswap=-1 198 199 echo "zram swapoff: OK" 200} 201 202zram_makefs() 203{ 204 local i=0 205 for fs in $zram_filesystems; do 206 # if requested fs not supported default it to ext2 207 which mkfs.$fs > /dev/null 2>&1 || fs=ext2 208 209 echo "make $fs filesystem on /dev/zram$i" 210 mkfs.$fs /dev/zram$i > err.log 2>&1 211 if [ $? -ne 0 ]; then 212 cat err.log 213 echo "FAIL failed to make $fs on /dev/zram$i" 214 fi 215 i=$(($i + 1)) 216 echo "zram mkfs.$fs: OK" 217 done 218} 219 220zram_mount() 221{ 222 local i=0 223 for i in $(seq 0 $(($dev_num - 1))); do 224 echo "mount /dev/zram$i" 225 mkdir zram$i 226 mount /dev/zram$i zram$i > /dev/null || \ 227 echo "FAIL mount /dev/zram$i failed" 228 dev_mounted=$i 229 done 230 231 echo "zram mount of zram device(s): OK" 232} 233