6 # This test needs to be run on the client
9 LUSTRE=${LUSTRE:-`dirname $0`/..}
10 . $LUSTRE/tests/test-framework.sh
14 . ${CONFIG:=$LUSTRE/tests/cfg/local.sh}
21 add_mds mds --dev $MDSDEV --size $MDSSIZE
22 if [ ! -z "$mdsfailover_HOST" ]; then
23 add_mdsfailover mds --dev $MDSDEV --size $MDSSIZE
26 add_lov lov1 mds --stripe_sz $STRIPE_BYTES \
27 --stripe_cnt $STRIPES_PER_OBJ --stripe_pattern 0
28 add_ost ost --lov lov1 --dev $OSTDEV --size $OSTSIZE
29 add_ost ost2 --lov lov1 --dev ${OSTDEV}-2 --size $OSTSIZE
30 add_client client mds --lov lov1 --path $MOUNT
36 # make sure we are using the primary MDS, so the config log will
37 # be able to clean up properly.
38 activemds=`facet_active mds`
39 if [ $activemds != "mds" ]; then
42 zconf_umount `hostname` $MOUNT
43 stop mds ${FORCE} $MDSLCONFARGS
44 stop ost2 ${FORCE} --dump cleanup.log
45 stop ost ${FORCE} --dump cleanup.log
48 if [ "$ONLY" == "cleanup" ]; then
49 sysctl -w portals.debug=0 || true
54 SETUP=${SETUP:-"setup"}
55 CLEANUP=${CLEANUP:-"cleanup"}
60 start ost --reformat $OSTLCONFARGS
61 start ost2 --reformat $OSTLCONFARGS
62 [ "$DAEMONFILE" ] && $LCTL debug_daemon start $DAEMONFILE $DAEMONSIZE
63 start mds $MDSLCONFARGS --reformat
64 grep " $MOUNT " /proc/mounts || zconf_mount `hostname` $MOUNT
69 if [ "$ONLY" == "setup" ]; then
75 # bug 3488 - test MDS replay more intensely
85 run_test 1 "fail MDS during dbench"
89 bonnie++ -u root -d $DIR/$tdir -s 0 -n 1 &
98 run_test 2 "fail MDS during bonnie++"
100 if [ $UID -ne 0 ]; then
104 RUNAS_ID=${RUNAS_ID:-500}
105 if [ -z "$RUNAS_GID" ]; then
106 RUNAS=${RUNAS:-"runas -u $RUNAS_ID"}
108 RUNAS=${RUNAS:-"runas -u $RUNAS_ID -g $RUNAS_GID"}
117 [ $RUNAS_ID -ne $UID ] && HOME=/tmp
120 cvsroot=$DIR/${tdir}-csvroot
123 chown $RUNAS_ID $cvsroot
124 $RUNAS cvs -d $cvsroot init || error
127 # some versions of cvs import exit(1) when asked to import links or
128 # files they can't read. ignore those files.
129 TOIGNORE=$(find . -type l -printf '-I %f\n' -o \
130 ! -perm +4 -printf '-I %f\n')
131 $RUNAS cvs -d $cvsroot import -m "nomesg" $TOIGNORE \
136 chown $RUNAS_ID $DIR/$repos
137 $RUNAS cvs -d $cvsroot co $repos
141 for i in `seq 1 20`; do
142 $RUNAS touch ${tfile}-$i
143 $RUNAS cvs add -m 'addmsg' ${tfile}-$i
148 $RUNAS cvs commit -m 'nomsg' ${tfile}-*
152 run_test 3 "fail MDS during cvs commit"
160 ln $DIR/$tfile-1 $DIR/$tfile-2 || return 1
163 multiop $DIR/$tfile-2 Ouc
166 $CHECKSTAT -t file $DIR/$tfile-1 || return 2
169 run_test 4 "|X| unlink file with multiple links while open"
174 ln $DIR/$tfile-1 $DIR/$tfile-2 || return 1
175 multiop $DIR/$tfile-2 Ouc
179 $CHECKSTAT -t file $DIR/$tfile-1 || return 2
182 run_test 5 "|X| unlink file with multiple links while open"
186 ln $DIR/$tfile-1 $DIR/$tfile-2
189 multiop $DIR/$tfile-1 O_uc &
191 multiop $DIR/$tfile-2 Ouc
196 wait $MUTLIPID || return 1
198 [ -e $DIR/$tfile-1 ] && return 2
199 [ -e $DIR/$tfile-2 ] && return 3
202 run_test 6 "|X| open-unlink file with multiple links"
207 ln $DIR/$tfile-1 $DIR/$tfile-2
208 multiop $DIR/$tfile-1 O_uc &
211 multiop $DIR/$tfile-2 Ouc
215 wait $MUTLIPID || return 1
218 [ -e $DIR/$tfile-1 ] && return 2
219 [ -e $DIR/$tfile-2 ] && return 3
222 run_test 7 "|X| open-unlink file with multiple links"
226 opendirunlink $DIR/$tdir $DIR/$tdir || return 1
228 $CHECKSTAT -a $DIR/$tdir || return 2
230 run_test 8 "|X| remove of open directory"
232 check_kernel_version() {
233 VERSION_FILE=/proc/fs/lustre/kernel_version
235 [ ! -f $VERSION_FILE ] && echo "can't find kernel version" && return 1
236 GOT_VER=`cat $VERSION_FILE`
237 [ $GOT_VER -ge $WANT_VER ] && return 0
238 log "test needs at least kernel version $WANT_VER, running $GOT_VER"
243 check_kernel_version 34 || return 0
245 openfilleddirunlink $DIR/$tdir || return 1
248 run_test 9 "|X| remove of open non-empty directory"
250 equals_msg test complete, cleaning up