5 # bug number for skipped test:
6 ALWAYS_EXCEPT=${ALWAYS_EXCEPT:-""}
7 # UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
9 [ "$ALWAYS_EXCEPT$EXCEPT" ] && echo "Skipping tests: $ALWAYS_EXCEPT $EXCEPT"
12 export PATH=$PWD/$SRCDIR:$SRCDIR:$SRCDIR/../utils:$PATH
15 FSTYPE=${FSTYPE:-ext3}
17 CHECKSTAT=${CHECKSTAT:-"checkstat -v"}
18 CREATETEST=${CREATETEST:-createtest}
20 LSTRIPE=${LSTRIPE:-"$LFS setstripe"}
21 LFIND=${LFIND:-"$LFS find"}
22 LVERIFY=${LVERIFY:-ll_dirstripe_verify}
24 MCREATE=${MCREATE:-mcreate}
25 OPENFILE=${OPENFILE:-openfile}
26 OPENUNLINK=${OPENUNLINK:-openunlink}
27 TOEXCL=${TOEXCL:-toexcl}
28 TRUNCATE=${TRUNCATE:-truncate}
29 MUNLINK=${MUNLINK:-munlink}
30 SOCKETSERVER=${SOCKETSERVER:-socketserver}
31 SOCKETCLIENT=${SOCKETCLIENT:-socketclient}
32 IOPENTEST1=${IOPENTEST1:-iopentest1}
33 IOPENTEST2=${IOPENTEST2:-iopentest2}
34 PTLDEBUG=${PTLDEBUG:-0}
37 if [ $UID -ne 0 ]; then
41 RUNAS_ID=${RUNAS_ID:-500}
42 RUNAS=${RUNAS:-"runas -u $RUNAS_ID"}
45 export NAME=${NAME:-cmobd}
51 sh llmountcleanup.sh > /dev/null || exit 20
58 sh llrmount.sh > /dev/null || exit 10
66 lctl mark "$*" 2> /dev/null || true
71 strace -o $TMP/$1.strace -ttt $*
73 log "FINISHED: $*: rc $RC"
78 check_kernel_version() {
79 VERSION_FILE=/proc/fs/lustre/kernel_version
81 [ ! -f $VERSION_FILE ] && echo "can't find kernel version" && return 1
82 GOT_VER=`cat $VERSION_FILE`
83 [ $GOT_VER -ge $WANT_VER ] && return 0
84 log "test needs at least kernel version $WANT_VER, running $GOT_VER"
89 if ! mount | grep -q $DIR; then
92 echo $PTLDEBUG >/proc/sys/portals/debug
94 export TESTNAME=test_$1
95 test_$1 || error "test_$1: exit with rc=$?"
102 build_test_filter() {
106 for E in $EXCEPT $ALWAYS_EXCEPT; do
107 eval EXCEPT_${E}=true
116 IFS=abcdefghijklmnopqrstuvwxyz _basetest $1
123 if [ ${!testname}x != x ]; then
128 if [ ${!testname}x != x ]; then
136 if [ ${!testname}x != x ]; then
137 echo "skipping excluded test $1"
140 testname=EXCEPT_$base
141 if [ ${!testname}x != x ]; then
142 echo "skipping excluded test $1 (base $base)"
149 [ "$SANITYLOG" ] && rm -f $SANITYLOG || true
153 if [ "$SANITYLOG" ]; then
154 echo "FAIL: $TESTNAME $@" >> $SANITYLOG
164 MOUNT="`mount | awk '/^'$NAME' .* lustre_lite / { print $3 }'`"
165 if [ -z "$MOUNT" ]; then
167 MOUNT="`mount | awk '/^'$NAME' .* lustre_lite / { print $3 }'`"
168 [ -z "$MOUNT" ] && error "NAME=$NAME not mounted"
172 [ `echo $MOUNT | wc -w` -gt 1 ] && error "NAME=$NAME mounted more than once"
175 [ -z "`echo $DIR | grep $MOUNT`" ] && echo "$DIR not in $MOUNT" && exit 99
177 rm -rf $DIR/[Rdfs][1-9]*
181 echo preparing for tests involving mounts
182 EXT2_DEV=${EXT2_DEV:-/tmp/SANITY.LOOP}
184 mke2fs -j -F $EXT2_DEV 8000 > /dev/null
188 device=`$LCTL device_list | grep " $name " | awk '{print $1}'`
191 echo "Can't find device $name"
203 rm -fr $DIR/1a0 > /dev/null
205 echo "mkdir $DIR/1a0"
206 mkdir $DIR/1a0 || error
207 echo "cache flush on $NAME"
208 lsync $NAME >/dev/null || error
210 echo "touch $DIR/1a0/f0"
211 touch $DIR/1a0/f0 || error
212 echo "cache flush on $NAME"
213 lsync $NAME >/dev/null || error
215 echo "chmod +x $DIR/1a0/f0"
216 chmod +x $DIR/1a0/f0 || error
217 echo "cache flush on $NAME"
218 lsync $NAME >/dev/null || error
220 echo "mv $DIR/1a0/f0 $DIR/1a0/f01"
221 mv $DIR/1a0/f0 $DIR/1a0/f01 || error
222 echo "cache flush on $NAME"
223 lsync $NAME >/dev/null || error
225 echo "rm $DIR/1a0/f01"
226 rm $DIR/1a0/f01 || error
227 echo "cache flush on $NAME"
228 lsync $NAME >/dev/null || error
230 echo "touch $DIR/1a0/f01"
231 touch $DIR/1a0/f01 || error
232 echo "cache flush on $NAME"
233 lsync $NAME >/dev/null || error
235 echo "ln $DIR/1a0/f01 $DIR/1a0/f01h"
236 ln $DIR/1a0/f01 $DIR/1a0/f01h || error
237 echo "cache flush on $NAME"
238 lsync $NAME >/dev/null || error
240 echo "ln -s $DIR/1a0/f01 $DIR/1a0/f01s"
241 ln -s $DIR/1a0/f01 $DIR/1a0/f01s || error
243 rm -fr $DIR/1a0 > /dev/null
244 echo "cache flush on $NAME"
245 lsync $NAME >/dev/null || error
247 run_test 1a " WB test (lsync after each MD operation)============="
250 echo "mkdir $DIR/1b0"
251 mkdir $DIR/1b0 || error
252 echo "touch $DIR/1b0/f0"
253 touch $DIR/1b0/f0 || error
254 echo "chmod +x $DIR/1b0/f0"
255 chmod +x $DIR/1b0/f0 || error
256 echo "mv $DIR/1b0/f0 $DIR/1b0/f01"
257 mv $DIR/1b0/f0 $DIR/1b0/f01 || error
258 echo "rm $DIR/1b0/f01"
259 rm $DIR/1b0/f01 || error
260 echo "touch $DIR/1b0/f01"
261 touch $DIR/1b0/f01 || error
262 echo "ln $DIR/1b0/f01 $DIR/1b0/f01h"
263 ln $DIR/1b0/f01 $DIR/1b0/f01h || error
264 echo "ln -s $DIR/1b0/f01 $DIR/1b0/f01s"
265 ln -s $DIR/1b0/f01 $DIR/1b0/f01s || error
267 rm -fr $DIR/1b0 > /dev/null
268 echo "cache flush on $NAME"
269 lsync $NAME >/dev/null || error
271 run_test 1b " WB test (lsync after bunch of MD operarions)============="
274 echo "mkdir $DIR/2a0"
275 mkdir $DIR/2a0 || error
276 echo "createmany -o $DIR/2a0/f 4000"
277 createmany -o $DIR/2a0/f 4000
278 echo "cache flush on $NAME"
279 lsync $NAME >/dev/null || error
283 echo "find $DIR/2a0 -type f -exec rm -f {} \;"
284 find $DIR/2a0 -type f -exec rm -f {} \;
285 rmdir $DIR/2a0 || error
286 echo "cache flush on $NAME"
287 lsync $NAME >/dev/null || error
290 [ "x$MODE" = "xlmv" ] && {
291 run_test 2a " WB test (flush createmany on master LMV) ======================"
292 run_test 2b " WB test (flush delmany on master LMV) ========================="
299 log "cleanup: ========================================================"
300 if [ "`mount | grep ^$NAME`" ]; then
301 rm -rf $DIR/[Rdfs][1-9]*
302 if [ "$I_MOUNTED" = "yes" ]; then
303 sh llmountcleanup.sh || error
307 echo "=========================== finished ============================"
308 [ -f "$SANITYLOG" ] && cat $SANITYLOG && exit 1 || true