blob: ac7128bde3d7f66f9055d72650797dbb603ea266 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
#!/bin/sh
# Copyright (c), 2024, Huawei Technologies Co, Ltd.
# Author: Zhihao Cheng <chengzhihao1@huawei.com>
#
# Test Description:
# For many kinds of flash, do following things
# 1. mount UBIFS
# 2. fsstress & powercut & unmount
# 3. fsck UBIFS
# 4. check UBIFS mounting result
# Running time: 1h
TESTBINDIR=@TESTBINDIR@
source $TESTBINDIR/common.sh
function run_test()
{
local simulator="$1";
local size="$2";
local peb_size="$3";
local page_size="$4";
local encryption=$5;
echo "======================================================================"
printf "%s" "$simulator: ${size}MiB PEB size ${peb_size}KiB"
if [ "$simulator" = "nandsim" ]; then
printf " %s" "page size ${page_size}Bytes"
fi
printf " $encryption\n"
if [ "$simulator" = "nandsim" ]; then
$TESTBINDIR/load_nandsim.sh "$size" "$peb_size" "$page_size" || echo "cannot load nandsim";
mtdnum="$(find_mtd_device "$nandsim_patt")"
elif [ "$simulator" = "mtdram" ]; then
load_mtdram "$size" "$peb_size" || echo "cannot load mtdram"
mtdnum="$(find_mtd_device "$mtdram_patt")"
else
fatal "$simulator is not supported"
fi
flash_eraseall /dev/mtd$mtdnum
modprobe ubi mtd="$mtdnum,$page_size" || fatal "modprobe ubi fail"
ubimkvol -N vol_test -m -n 0 /dev/ubi$UBI_NUM || fatal "mkvol fail"
modprobe ubifs || fatal "modprobe ubifs fail"
mount_ubifs $DEV $MNT || fatal "mount ubifs fail"
if [[ "$encryption" == "encrypted" ]]; then
encryption_gen_key
encryption_set_key $MNT
fi
fsstress -d $MNT -l0 -p4 -n10000 &
sleep $((RANDOM % 120))
powercut
ps -e | grep -w fsstress > /dev/null 2>&1
while [ $? -eq 0 ]
do
killall -9 fsstress > /dev/null 2>&1
sleep 1
ps -e | grep -w fsstress > /dev/null 2>&1
done
while true
do
res=`mount | grep "$MNT"`
if [[ "$res" == "" ]]
then
break;
fi
umount $MNT
sleep 0.1
done
fsck.ubifs -a $DEV 2>&1 > $LOG_FILE
res=$?
cat $LOG_FILE
if [[ $res != $FSCK_OK ]]
then
# Powercut during layout_leb_in_gaps may change index LEBs
# without updating LPT.
idx_log=`cat $LOG_FILE | grep "Inconsistent properties" | grep "is_idx 1"`
# The lpt nodes could be parsed incorrectly because the lpt disk
# layout is too simple. See details in
# https://lore.kernel.org/linux-mtd/97ca7fe4-4ad4-edd1-e97a-1d540aeabe2d@huawei.com/
lpt_log=`cat $LOG_FILE | grep "dbg_check_ltab_lnum: invalid empty space in LEB"`
if [[ "$idx_log" == "" ]] && [[ "$lpt_log" == "" ]]; then
fatal "fsck fail $res"
fi
if [[ $res != $FSCK_NONDESTRUCT ]]; then
fatal "fsck fail $res"
fi
fi
dmesg -c > /dev/null # powercut could reproduce error messages
enable_chkfs
mount_ubifs $DEV $MNT "noauthentication" "noatime"
res=$?
if [[ $res != 0 ]]
then
fatal "mount fail $res"
fi
if [[ "$encryption" == "encrypted" ]]; then
encryption_set_key $MNT
fi
du -sh $MNT > /dev/null # Make sure all files are accessible
ret=$?
if [[ $ret != 0 ]]; then
fatal "Cannot access all files"
fi
check_err_msg
umount $MNT
res=$?
if [[ $res != 0 ]]
then
fatal "unmount fail $res"
fi
check_err_msg
modprobe -r ubifs
modprobe -r ubi
modprobe -r $simulator
echo "----------------------------------------------------------------------"
}
check_fsstress
start_t=$(date +%s)
echo "Do powercut+fsck+mount test in kinds of flashes"
for simulator in "mtdram" "nandsim"; do
for encryption in "encrypted" "noencrypted"; do
run_test "$simulator" "16" "16" "512" $encryption
run_test "$simulator" "64" "16" "512" $encryption
run_test "$simulator" "128" "64" "2048" $encryption
run_test "$simulator" "256" "128" "2048" $encryption
run_test "$simulator" "512" "128" "2048" $encryption
run_test "$simulator" "1024" "512" "2048" $encryption
done
done
end_t=$(date +%s)
time_cost=$(( end_t - start_t ))
echo "Success, cost $time_cost seconds"
exit 0
|