5
5
# Author: Alexey Kodanev <alexey.kodanev@oracle.com>
6
6
# Modified: Naresh Kamboju <naresh.kamboju@linaro.org>
7
7
8
- MODULE=0
9
8
dev_makeswap=-1
10
9
dev_mounted=-1
11
-
10
+ dev_start=0
11
+ dev_end=-1
12
+ module_load=-1
13
+ sys_control=-1
12
14
# Kselftest framework requirement - SKIP code is 4.
13
15
ksft_skip=4
14
16
kernel_version=` uname -r | cut -d' .' -f1,2`
@@ -46,57 +48,72 @@ zram_cleanup()
46
48
{
47
49
echo " zram cleanup"
48
50
local i=
49
- for i in $( seq 0 $dev_makeswap ) ; do
51
+ for i in $( seq $dev_start $dev_makeswap ) ; do
50
52
swapoff /dev/zram$i
51
53
done
52
54
53
- for i in $( seq 0 $dev_mounted ) ; do
55
+ for i in $( seq $dev_start $dev_mounted ) ; do
54
56
umount /dev/zram$i
55
57
done
56
58
57
- for i in $( seq 0 $(( $dev_num - 1 )) ) ; do
59
+ for i in $( seq $dev_start $dev_end ) ; do
58
60
echo 1 > /sys/block/zram${i} /reset
59
61
rm -rf zram$i
60
62
done
61
63
62
- }
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
63
69
64
- zram_unload ()
65
- {
66
- if [ $MODULE -ne 0 ] ; then
67
- echo " zram rmmod zram"
70
+ if [ $module_load -eq 1 ]; then
68
71
rmmod zram > /dev/null 2>&1
69
72
fi
70
73
}
71
74
72
75
zram_load ()
73
76
{
74
- # check zram module exists
75
- MODULE_PATH=/lib/modules/` uname -r` /kernel/drivers/block/zram/zram.ko
76
- if [ -f $MODULE_PATH ]; then
77
- MODULE=1
78
- echo " create '$dev_num ' zram device(s)"
79
- modprobe zram num_devices=$dev_num
80
- if [ $? -ne 0 ]; then
81
- echo " failed to insert zram module"
82
- exit 1
83
- fi
84
-
85
- dev_num_created=$( ls /dev/zram* | wc -w)
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
86
95
87
- if [ " $dev_num_created " -ne " $dev_num " ]; then
88
- echo " unexpected num of devices: $dev_num_created "
89
- ERR_CODE=-1
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
90
106
else
91
- echo " zram load module successful"
107
+ echo " test needs CONFIG_ZRAM=m on old kernel without" \
108
+ " zram-control interface"
109
+ exit $ksft_skip
92
110
fi
93
- elif [ -b /dev/zram0 ]; then
94
- echo " /dev/zram0 device file found: OK"
95
- else
96
- echo " ERROR: No zram.ko module or no /dev/zram0 device found"
97
- echo " $TCID : CONFIG_ZRAM is not set"
98
- exit 1
111
+ modprobe zram num_devices=$dev_num
99
112
fi
113
+
114
+ module_load=1
115
+ dev_end=$(( $dev_num - 1 ))
116
+ echo " all zram devices (/dev/zram0~$dev_end ) successfully created"
100
117
}
101
118
102
119
zram_max_streams ()
@@ -110,7 +127,7 @@ zram_max_streams()
110
127
return 0
111
128
fi
112
129
113
- local i=0
130
+ local i=$dev_start
114
131
for max_s in $zram_max_streams ; do
115
132
local sys_path=" /sys/block/zram${i} /max_comp_streams"
116
133
echo $max_s > $sys_path || \
@@ -122,7 +139,7 @@ zram_max_streams()
122
139
echo " FAIL can't set max_streams '$max_s ', get $max_stream "
123
140
124
141
i=$(( $i + 1 ))
125
- echo " $sys_path = '$max_streams ' ( $i / $dev_num ) "
142
+ echo " $sys_path = '$max_streams '"
126
143
done
127
144
128
145
echo " zram max streams: OK"
@@ -132,15 +149,16 @@ zram_compress_alg()
132
149
{
133
150
echo " test that we can set compression algorithm"
134
151
135
- local algs=$( cat /sys/block/zram0/comp_algorithm)
152
+ local i=$dev_start
153
+ local algs=$( cat /sys/block/zram${i} /comp_algorithm)
136
154
echo " supported algs: $algs "
137
- local i=0
155
+
138
156
for alg in $zram_algs ; do
139
157
local sys_path=" /sys/block/zram${i} /comp_algorithm"
140
158
echo " $alg " > $sys_path || \
141
159
echo " FAIL can't set '$alg ' to $sys_path "
142
160
i=$(( $i + 1 ))
143
- echo " $sys_path = '$alg ' ( $i / $dev_num ) "
161
+ echo " $sys_path = '$alg '"
144
162
done
145
163
146
164
echo " zram set compression algorithm: OK"
@@ -149,14 +167,14 @@ zram_compress_alg()
149
167
zram_set_disksizes ()
150
168
{
151
169
echo " set disk size to zram device(s)"
152
- local i=0
170
+ local i=$dev_start
153
171
for ds in $zram_sizes ; do
154
172
local sys_path=" /sys/block/zram${i} /disksize"
155
173
echo " $ds " > $sys_path || \
156
174
echo " FAIL can't set '$ds ' to $sys_path "
157
175
158
176
i=$(( $i + 1 ))
159
- echo " $sys_path = '$ds ' ( $i / $dev_num ) "
177
+ echo " $sys_path = '$ds '"
160
178
done
161
179
162
180
echo " zram set disksizes: OK"
@@ -166,14 +184,14 @@ zram_set_memlimit()
166
184
{
167
185
echo " set memory limit to zram device(s)"
168
186
169
- local i=0
187
+ local i=$dev_start
170
188
for ds in $zram_mem_limits ; do
171
189
local sys_path=" /sys/block/zram${i} /mem_limit"
172
190
echo " $ds " > $sys_path || \
173
191
echo " FAIL can't set '$ds ' to $sys_path "
174
192
175
193
i=$(( $i + 1 ))
176
- echo " $sys_path = '$ds ' ( $i / $dev_num ) "
194
+ echo " $sys_path = '$ds '"
177
195
done
178
196
179
197
echo " zram set memory limit: OK"
@@ -182,8 +200,8 @@ zram_set_memlimit()
182
200
zram_makeswap ()
183
201
{
184
202
echo " make swap with zram device(s)"
185
- local i=0
186
- for i in $( seq 0 $(( $dev_num - 1 )) ) ; do
203
+ local i=$dev_start
204
+ for i in $( seq $dev_start $dev_end ) ; do
187
205
mkswap /dev/zram$i > err.log 2>&1
188
206
if [ $? -ne 0 ]; then
189
207
cat err.log
@@ -206,7 +224,7 @@ zram_makeswap()
206
224
zram_swapoff ()
207
225
{
208
226
local i=
209
- for i in $( seq 0 $dev_makeswap ) ; do
227
+ for i in $( seq $dev_start $dev_end ) ; do
210
228
swapoff /dev/zram$i > err.log 2>&1
211
229
if [ $? -ne 0 ]; then
212
230
cat err.log
@@ -220,7 +238,7 @@ zram_swapoff()
220
238
221
239
zram_makefs ()
222
240
{
223
- local i=0
241
+ local i=$dev_start
224
242
for fs in $zram_filesystems ; do
225
243
# if requested fs not supported default it to ext2
226
244
which mkfs.$fs > /dev/null 2>&1 || fs=ext2
@@ -239,7 +257,7 @@ zram_makefs()
239
257
zram_mount ()
240
258
{
241
259
local i=0
242
- for i in $( seq 0 $(( $dev_num - 1 )) ) ; do
260
+ for i in $( seq $dev_start $dev_end ) ; do
243
261
echo " mount /dev/zram$i "
244
262
mkdir zram$i
245
263
mount /dev/zram$i zram$i > /dev/null || \
0 commit comments