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 [ -f $DIR/d52a/foo ] && chattr -a $DIR/d52a/foo
178 [ -f $DIR/d52b/foo ] && chattr -i $DIR/d52b/foo
179 rm -rf $DIR/[Rdfs][1-9]*
183 echo preparing for tests involving mounts
184 EXT2_DEV=${EXT2_DEV:-/tmp/SANITY.LOOP}
186 mke2fs -j -F $EXT2_DEV 8000 > /dev/null
190 device=`$LCTL device_list | grep " $name " | awk '{print $1}'`
193 echo "Can't find device $name"
205 rm -fr $DIR/1a0 > /dev/null
207 echo "mkdir $DIR/1a0"
208 mkdir $DIR/1a0 || error
209 echo "cache flush on $NAME"
210 lsync $NAME >/dev/null || error
212 echo "touch $DIR/1a0/f0"
213 touch $DIR/1a0/f0 || error
214 echo "cache flush on $NAME"
215 lsync $NAME >/dev/null || error
217 echo "chmod +x $DIR/1a0/f0"
218 chmod +x $DIR/1a0/f0 || error
219 echo "cache flush on $NAME"
220 lsync $NAME >/dev/null || error
222 echo "mv $DIR/1a0/f0 $DIR/1a0/f01"
223 mv $DIR/1a0/f0 $DIR/1a0/f01 || error
224 echo "cache flush on $NAME"
225 lsync $NAME >/dev/null || error
227 echo "rm $DIR/1a0/f01"
228 rm $DIR/1a0/f01 || error
229 echo "cache flush on $NAME"
230 lsync $NAME >/dev/null || error
232 echo "touch $DIR/1a0/f01"
233 touch $DIR/1a0/f01 || error
234 echo "cache flush on $NAME"
235 lsync $NAME >/dev/null || error
237 echo "ln $DIR/1a0/f01 $DIR/1a0/f01h"
238 ln $DIR/1a0/f01 $DIR/1a0/f01h || error
239 echo "cache flush on $NAME"
240 lsync $NAME >/dev/null || error
242 echo "ln -s $DIR/1a0/f01 $DIR/1a0/f01s"
243 ln -s $DIR/1a0/f01 $DIR/1a0/f01s || error
245 rm -fr $DIR/1a0 > /dev/null
246 echo "cache flush on $NAME"
247 lsync $NAME >/dev/null || error
249 run_test 1a " WB test (lsync after each MD operation)============="
252 echo "mkdir $DIR/1b0"
253 mkdir $DIR/1b0 || error
254 echo "touch $DIR/1b0/f0"
255 touch $DIR/1b0/f0 || error
256 echo "chmod +x $DIR/1b0/f0"
257 chmod +x $DIR/1b0/f0 || error
258 echo "mv $DIR/1b0/f0 $DIR/1b0/f01"
259 mv $DIR/1b0/f0 $DIR/1b0/f01 || error
260 echo "rm $DIR/1b0/f01"
261 rm $DIR/1b0/f01 || error
262 echo "touch $DIR/1b0/f01"
263 touch $DIR/1b0/f01 || error
264 echo "ln $DIR/1b0/f01 $DIR/1b0/f01h"
265 ln $DIR/1b0/f01 $DIR/1b0/f01h || error
266 echo "ln -s $DIR/1b0/f01 $DIR/1b0/f01s"
267 ln -s $DIR/1b0/f01 $DIR/1b0/f01s || error
269 rm -fr $DIR/1b0 > /dev/null
270 echo "cache flush on $NAME"
271 lsync $NAME >/dev/null || error
273 run_test 1b " WB test (lsync after bunch of MD operarions)============="
276 echo "mkdir $DIR/2a0"
277 mkdir $DIR/2a0 || error
278 echo "createmany -o $DIR/2a0/f 4000"
279 createmany -o $DIR/2a0/f 4000
280 echo "cache flush on $NAME"
281 lsync $NAME >/dev/null || error
285 echo "find $DIR/2a0 -type f -exec rm -f {} \;"
286 find $DIR/2a0 -type f -exec rm -f {} \;
287 rmdir $DIR/2a0 || error
288 echo "cache flush on $NAME"
289 lsync $NAME >/dev/null || error
292 [ "x$MODE" = "xlmv" ] && {
293 run_test 2a " WB test (flush createmany on master LMV) ======================"
294 run_test 2b " WB test (flush delmany on master LMV) ========================="
301 log "cleanup: ========================================================"
302 if [ "`mount | grep ^$NAME`" ]; then
303 rm -rf $DIR/[Rdfs][1-9]*
304 if [ "$I_MOUNTED" = "yes" ]; then
305 sh llmountcleanup.sh || error
309 echo "=========================== finished ============================"
310 [ -f "$SANITYLOG" ] && cat $SANITYLOG && exit 1 || true