. ${CONFIG:=$LUSTRE/tests/cfg/${NAME}.sh}
init_logging
-[ "$SLOW" = "no" ] && EXCEPT_SLOW="24o 27m 64b 68 71 77f 78 115 124b"
+[ "$SLOW" = "no" ] && EXCEPT_SLOW="24o 27m 64b 68 71 77f 78 115 124b 230d"
[ $(facet_fstype $SINGLEMDS) = "zfs" ] &&
# bug number for skipped test: LU-1593 LU-2610 LU-2833 LU-1957 LU-2805
}
run_test 3 "mkdir; touch; rmdir; check dir ====================="
+# LU-4471 - failed rmdir on remote directories still removes directory on MDT0
+test_4() {
+ local MDTIDX=1
+ local remote_dir=remote_dir
+
+ [ $MDSCOUNT -ge 2 ] && skip "skip now for LU-4690" && return #LU-4690
+ test_mkdir $DIR/$remote_dir ||
+ error "Create remote directory failed"
+
+ touch $DIR/$remote_dir/$tfile ||
+ error "Create file under remote directory failed"
+
+ rmdir $DIR/$remote_dir &&
+ error "Expect error removing in-use dir $DIR/$remote_dir"
+
+ test -d $DIR/$remote_dir || error "Remote directory disappeared"
+}
+run_test 4 "mkdir; touch dir/file; rmdir; checkdir (expect error)"
+
test_5() {
test_mkdir -p $DIR/$tdir || error "mkdir $tdir failed"
test_mkdir $DIR/$tdir/d2 || error "mkdir $tdir/d2 failed"
[ $(lustre_version_code $SINGLEMDS) -le $(version_code 2.3.55) ] &&
TESTS="4094 4095"
+ # skip long symlink name for rhel6.5.
+ # rhel6.5 has a limit (PATH_MAX - sizeof(struct filename))
+ grep -q '6.5' /etc/redhat-release && TESTS="59 60 61 4062 4063"
+
for i in $TESTS; do
local SYMNAME=$(str_repeat 'x' $i)
ln -s $SYMNAME $DIR/$tdir/f$i || error "failed $i-char symlink"
echo "stop and checking mds${mds_index}: $cmd"
# e2fsck should not return error
- stop mds${mds_index} -f
+ stop mds${mds_index}
do_facet mds${mds_index} $cmd || rc=$?
start mds${mds_index} $devname $MDS_MOUNT_OPTS
local cmd
local rc=0
- for mdt_index in $(seq 1 $MDSCOUNT); do
+ # create/unlink in 17n only change 2 MDTs(MDT1/MDT2),
+ # so it only check MDT1/MDT2 instead of all of MDTs.
+ for mdt_index in $(seq 1 2); do
devname=$(mdsdevname $mdt_index)
cmd="$E2FSCK -fnvd $devname"
error "create files under remote dir failed $i"
done
- check_fs_consistency_17n || error "e2fsck report error"
+ check_fs_consistency_17n ||
+ error "e2fsck report error after create files under remote dir"
+
+ for ((i=0;i<10;i++)); do
+ rm -rf $DIR/$tdir/remote_dir_${i} ||
+ error "destroy remote dir error $i"
+ done
+
+ check_fs_consistency_17n ||
+ error "e2fsck report error after unlink files under remote dir"
+
+ [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.4.50) ] &&
+ skip "lustre < 2.4.50 does not support migrate mv " && return
+
+ for ((i=0; i<10; i++)); do
+ mkdir -p $DIR/$tdir/remote_dir_${i}
+ createmany -o $DIR/$tdir/remote_dir_${i}/f 10 ||
+ error "create files under remote dir failed $i"
+ $LFS mv -M 1 $DIR/$tdir/remote_dir_${i} ||
+ error "migrate remote dir error $i"
+ done
+ check_fs_consistency_17n || error "e2fsck report error after migration"
for ((i=0;i<10;i++)); do
rm -rf $DIR/$tdir/remote_dir_${i} ||
error "destroy remote dir error $i"
done
- check_fs_consistency_17n || error "e2fsck report error"
+ check_fs_consistency_17n || error "e2fsck report error after unlink"
}
run_test 17n "run e2fsck against master/slave MDT which contains remote dir"
run_test 24c "rename directory to non-existent target"
test_24d() {
- test_mkdir $DIR/$tdir
- test_mkdir $DIR/$tdir/d$testnum.1
- test_mkdir $DIR/$tdir/d$testnum.2
+ test_mkdir -c1 $DIR/$tdir
+ test_mkdir -c1 $DIR/$tdir/d$testnum.1
+ test_mkdir -c1 $DIR/$tdir/d$testnum.2
mrename $DIR/$tdir/d$testnum.1 $DIR/$tdir/d$testnum.2
$CHECKSTAT -a $DIR/$tdir/d$testnum.1 || error "d$testnum.1 exists"
$CHECKSTAT -t dir $DIR/$tdir/d$testnum.2 || error "d$testnum.2 not dir"
run_test 24g "mkdir .../R7{a,b}/d; mv .../R7a/d .../R7b/e ======"
test_24h() {
- test_mkdir $DIR/R8a
- test_mkdir $DIR/R8b
- test_mkdir $DIR/R8a/d
- test_mkdir $DIR/R8b/e
+ test_mkdir -c1 $DIR/R8a
+ test_mkdir -c1 $DIR/R8b
+ test_mkdir -c1 $DIR/R8a/d
+ test_mkdir -c1 $DIR/R8b/e
mrename $DIR/R8a/d $DIR/R8b/e
$CHECKSTAT -a $DIR/R8a/d || error
$CHECKSTAT -t dir $DIR/R8b/e || error
run_test 31f "remove of open directory with open-unlink file ==="
test_31g() {
- echo "-- cross directory link --"
- test_mkdir $DIR/d31ga
- test_mkdir $DIR/d31gb
- touch $DIR/d31ga/f
- ln $DIR/d31ga/f $DIR/d31gb/g
- $CHECKSTAT -t file $DIR/d31ga/f || error "source"
- [ `stat -c%h $DIR/d31ga/f` == '2' ] || error "source nlink"
- $CHECKSTAT -t file $DIR/d31gb/g || error "target"
- [ `stat -c%h $DIR/d31gb/g` == '2' ] || error "target nlink"
+ echo "-- cross directory link --"
+ test_mkdir -c1 $DIR/${tdir}ga
+ test_mkdir -c1 $DIR/${tdir}gb
+ touch $DIR/${tdir}ga/f
+ ln $DIR/${tdir}ga/f $DIR/${tdir}gb/g
+ $CHECKSTAT -t file $DIR/${tdir}ga/f || error "source"
+ [ `stat -c%h $DIR/${tdir}ga/f` == '2' ] || error "source nlink"
+ $CHECKSTAT -t file $DIR/${tdir}gb/g || error "target"
+ [ `stat -c%h $DIR/${tdir}gb/g` == '2' ] || error "target nlink"
}
run_test 31g "cross directory link==============="
test_31h() {
- echo "-- cross directory link --"
- test_mkdir $DIR/d31h
- test_mkdir $DIR/d31h/dir
- touch $DIR/d31h/f
- ln $DIR/d31h/f $DIR/d31h/dir/g
- $CHECKSTAT -t file $DIR/d31h/f || error "source"
- [ `stat -c%h $DIR/d31h/f` == '2' ] || error "source nlink"
- $CHECKSTAT -t file $DIR/d31h/dir/g || error "target"
- [ `stat -c%h $DIR/d31h/dir/g` == '2' ] || error "target nlink"
+ echo "-- cross directory link --"
+ test_mkdir -c1 $DIR/${tdir}
+ test_mkdir -c1 $DIR/${tdir}/dir
+ touch $DIR/${tdir}/f
+ ln $DIR/${tdir}/f $DIR/${tdir}/dir/g
+ $CHECKSTAT -t file $DIR/${tdir}/f || error "source"
+ [ `stat -c%h $DIR/${tdir}/f` == '2' ] || error "source nlink"
+ $CHECKSTAT -t file $DIR/${tdir}/dir/g || error "target"
+ [ `stat -c%h $DIR/${tdir}/dir/g` == '2' ] || error "target nlink"
}
run_test 31h "cross directory link under child==============="
test_31i() {
- echo "-- cross directory link --"
- test_mkdir $DIR/d31i
- test_mkdir $DIR/d31i/dir
- touch $DIR/d31i/dir/f
- ln $DIR/d31i/dir/f $DIR/d31i/g
- $CHECKSTAT -t file $DIR/d31i/dir/f || error "source"
- [ `stat -c%h $DIR/d31i/dir/f` == '2' ] || error "source nlink"
- $CHECKSTAT -t file $DIR/d31i/g || error "target"
- [ `stat -c%h $DIR/d31i/g` == '2' ] || error "target nlink"
+ echo "-- cross directory link --"
+ test_mkdir -c1 $DIR/$tdir
+ test_mkdir -c1 $DIR/$tdir/dir
+ touch $DIR/$tdir/dir/f
+ ln $DIR/$tdir/dir/f $DIR/$tdir/g
+ $CHECKSTAT -t file $DIR/$tdir/dir/f || error "source"
+ [ `stat -c%h $DIR/$tdir/dir/f` == '2' ] || error "source nlink"
+ $CHECKSTAT -t file $DIR/$tdir/g || error "target"
+ [ `stat -c%h $DIR/$tdir/g` == '2' ] || error "target nlink"
}
run_test 31i "cross directory link under parent==============="
-
test_31j() {
- test_mkdir $DIR/d31j
- test_mkdir $DIR/d31j/dir1
- ln $DIR/d31j/dir1 $DIR/d31j/dir2 && error "ln for dir"
- link $DIR/d31j/dir1 $DIR/d31j/dir3 && error "link for dir"
- mlink $DIR/d31j/dir1 $DIR/d31j/dir4 && error "mlink for dir"
- mlink $DIR/d31j/dir1 $DIR/d31j/dir1 && error "mlink to the same dir"
+ test_mkdir -c1 -p $DIR/$tdir
+ test_mkdir -c1 -p $DIR/$tdir/dir1
+ ln $DIR/$tdir/dir1 $DIR/$tdir/dir2 && error "ln for dir"
+ link $DIR/$tdir/dir1 $DIR/$tdir/dir3 && error "link for dir"
+ mlink $DIR/$tdir/dir1 $DIR/$tdir/dir4 && error "mlink for dir"
+ mlink $DIR/$tdir/dir1 $DIR/$tdir/dir1 && error "mlink to the same dir"
return 0
}
run_test 31j "link for directory==============="
-
test_31k() {
- test_mkdir $DIR/d31k
- touch $DIR/d31k/s
- touch $DIR/d31k/exist
- mlink $DIR/d31k/s $DIR/d31k/t || error "mlink"
- mlink $DIR/d31k/s $DIR/d31k/exist && error "mlink to exist file"
- mlink $DIR/d31k/s $DIR/d31k/s && error "mlink to the same file"
- mlink $DIR/d31k/s $DIR/d31k && error "mlink to parent dir"
- mlink $DIR/d31k $DIR/d31k/s && error "mlink parent dir to target"
- mlink $DIR/d31k/not-exist $DIR/d31k/foo && error "mlink non-existing to new"
- mlink $DIR/d31k/not-exist $DIR/d31k/s && error "mlink non-existing to exist"
+ test_mkdir -c1 -p $DIR/$tdir
+ touch $DIR/$tdir/s
+ touch $DIR/$tdir/exist
+ mlink $DIR/$tdir/s $DIR/$tdir/t || error "mlink"
+ mlink $DIR/$tdir/s $DIR/$tdir/exist && error "mlink to exist file"
+ mlink $DIR/$tdir/s $DIR/$tdir/s && error "mlink to the same file"
+ mlink $DIR/$tdir/s $DIR/$tdir && error "mlink to parent dir"
+ mlink $DIR/$tdir $DIR/$tdir/s && error "mlink parent dir to target"
+ mlink $DIR/$tdir/not-exist $DIR/$tdir/foo && error "mlink non-existing to new"
+ mlink $DIR/$tdir/not-exist $DIR/$tdir/s && error "mlink non-existing to exist"
return 0
}
run_test 31k "link to file: the same, non-existing, dir==============="
test_31m() {
- test_mkdir $DIR/d31m
+ mkdir $DIR/d31m
touch $DIR/d31m/s
- test_mkdir $DIR/d31m2
+ mkdir $DIR/d31m2
touch $DIR/d31m2/exist
mlink $DIR/d31m/s $DIR/d31m2/t || error "mlink"
mlink $DIR/d31m/s $DIR/d31m2/exist && error "mlink to exist file"
local ost_last_id
local ostnum
local node
- local found=0
+ local found=false
+ local support_last_seq=true
+
+ [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.3.60) ]] ||
+ support_last_seq=false
# only test MDT0000
- local mdtosc=$(get_mdtosc_proc_path $SINGLEMDS)
- for value in $(do_facet $SINGLEMDS lctl get_param osc.$mdtosc.prealloc_last_id) ; do
- param=$(echo ${value[0]} | cut -d "=" -f1)
- ostname=$(echo $param | cut -d "." -f2 | cut -d - -f 1-2)
- param_seq=$(echo ${param} |
- sed -e s/prealloc_last_id/prealloc_last_seq/g)
- mds_last_seq=$(do_facet $SINGLEMDS lctl get_param -n $param_seq)
- mds_last=$(do_facet $SINGLEMDS lctl get_param -n $param)
+ local mdtosc=$(get_mdtosc_proc_path $SINGLEMDS)
+ local value
+ for value in $(do_facet $SINGLEMDS \
+ $LCTL get_param osc.$mdtosc.prealloc_last_id) ; do
+ param=$(echo ${value[0]} | cut -d "=" -f1)
+ ostname=$(echo $param | cut -d "." -f2 | cut -d - -f 1-2)
+
+ if $support_last_seq; then
+ param_seq=$(echo $param |
+ sed -e s/prealloc_last_id/prealloc_last_seq/g)
+ mds_last_seq=$(do_facet $SINGLEMDS \
+ $LCTL get_param -n $param_seq)
+ fi
+ mds_last=$(do_facet $SINGLEMDS $LCTL get_param -n $param)
ostnum=$(index_from_ostuuid ${ostname}_UUID)
node=$(facet_active_host ost$((ostnum+1)))
param="obdfilter.$ostname.last_id"
- for ost_last in $(do_node $node lctl get_param -n $param) ; do
- echo "$ostname.last_id=$ost_last ;MDS.last_id=$mds_last"
- ost_last_id=$(echo $ost_last | awk -F':' '{print $2}' |
- sed -e "s/^0x//g")
- ost_last_seq=$(echo $ost_last | awk -F':' '{print $1}')
- if [ $ost_last_seq = $mds_last_seq ]; then
- if [ $ost_last_id != $mds_last ]; then
- error "$ost_last != $mds_last_id"
- else
- found=1
- break
- fi
+ for ost_last in $(do_node $node $LCTL get_param -n $param) ; do
+ echo "$ostname.last_id=$ost_last; MDS.last_id=$mds_last"
+ ost_last_id=$ost_last
+
+ if $support_last_seq; then
+ ost_last_id=$(echo $ost_last |
+ awk -F':' '{print $2}' |
+ sed -e "s/^0x//g")
+ ost_last_seq=$(echo $ost_last |
+ awk -F':' '{print $1}')
+ [[ $ost_last_seq = $mds_last_seq ]] || continue
+ fi
+
+ if [[ $ost_last_id != $mds_last ]]; then
+ error "$ost_last_id != $mds_last"
+ else
+ found=true
+ break
fi
done
- done
- [ $found = 0 ] && error "can not match last_seq/last_id for $mdtosc"
+ done
+ $found || error "can not match last_seq/last_id for $mdtosc"
return 0
}
run_test 53 "verify that MDS and OSTs agree on pre-creation ===="
done
}
+cleanup_54c() {
+ loopdev="$DIR/loop54c"
+
+ trap 0
+ $UMOUNT -d $tdir || rc=$?
+ losetup -d $loopdev || true
+ rm $loopdev
+ return $rc
+}
+
test_54c() {
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
tfile="$DIR/f54c"
[ -z "$LOOPNUM" ] && echo "couldn't find empty loop device" && return
mknod $loopdev b 7 $LOOPNUM
echo "make a loop file system with $tfile on $loopdev ($LOOPNUM)..."
- dd if=/dev/zero of=$tfile bs=`page_size` seek=1024 count=1 > /dev/null
+ dd if=/dev/zero of=$tfile bs=$(get_page_size client) seek=1024 count=1 > /dev/null
losetup $loopdev $tfile || error "can't set up $loopdev for $tfile"
+ trap cleanup_54c EXIT
mkfs.ext2 $loopdev || error "mke2fs on $loopdev"
test_mkdir -p $tdir
mount -t ext2 $loopdev $tdir || error "error mounting $loopdev on $tdir"
dd if=/dev/zero of=$tdir/tmp bs=`page_size` count=30 || error "dd write"
df $tdir
dd if=$tdir/tmp of=/dev/zero bs=`page_size` count=30 || error "dd read"
- $UMOUNT -d $tdir
- losetup -d $loopdev
- rm $loopdev
+ cleanup_54c
}
run_test 54c "block device works in lustre ====================="
NUMFILES=3
NUMDIRS=3
setup_56() {
- local LOCAL_NUMFILES="$1"
- local LOCAL_NUMDIRS="$2"
- local MKDIR_PARAMS="$3"
-
- if [ ! -d "$TDIR" ] ; then
- test_mkdir -p $TDIR
- [ "$MKDIR_PARAMS" ] && $SETSTRIPE $MKDIR_PARAMS $TDIR
- for i in `seq 1 $LOCAL_NUMFILES` ; do
- touch $TDIR/file$i
- done
- for i in `seq 1 $LOCAL_NUMDIRS` ; do
- test_mkdir $TDIR/dir$i
- for j in `seq 1 $LOCAL_NUMFILES` ; do
- touch $TDIR/dir$i/file$j
- done
- done
- fi
+ local LOCAL_NUMFILES="$1"
+ local LOCAL_NUMDIRS="$2"
+ local MKDIR_PARAMS="$3"
+ local DIR_STRIPE_PARAMS="$4"
+
+ if [ ! -d "$TDIR" ] ; then
+ test_mkdir -p $DIR_STRIPE_PARAMS $TDIR
+ [ "$MKDIR_PARAMS" ] && $SETSTRIPE $MKDIR_PARAMS $TDIR
+ for i in `seq 1 $LOCAL_NUMFILES` ; do
+ touch $TDIR/file$i
+ done
+ for i in `seq 1 $LOCAL_NUMDIRS` ; do
+ test_mkdir $DIR_STRIPE_PARAMS $TDIR/dir$i
+ for j in `seq 1 $LOCAL_NUMFILES` ; do
+ touch $TDIR/dir$i/file$j
+ done
+ done
+ fi
}
setup_56_special() {
test_56o() {
TDIR=$DIR/${tdir}o
setup_56 $NUMFILES $NUMDIRS
-
utime $TDIR/file1 > /dev/null || error "utime (1)"
utime $TDIR/file2 > /dev/null || error "utime (2)"
utime $TDIR/dir1 > /dev/null || error "utime (3)"
TDIR=$DIR/${tdir}w
rm -rf $TDIR || error "remove $TDIR failed"
- setup_56 $NUMFILES $NUMDIRS "-c $OSTCOUNT"
+ setup_56 $NUMFILES $NUMDIRS "-c $OSTCOUNT" "-c1"
local stripe_size
stripe_size=$($GETSTRIPE -S -d $TDIR) ||
#run_test 62 "verify obd_match failure doesn't LBUG (should -EIO)"
# bug 2319 - oig_wait() interrupted causes crash because of invalid waitq.
-test_63a() { # was test_63
+# Though this test is irrelevant anymore, it helped to reveal some
+# other grant bugs (LU-4482), let's keep it.
+test_63a() { # was test_63
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
MAX_DIRTY_MB=`lctl get_param -n osc.*.max_dirty_mb | head -n 1`
- lctl set_param -n osc.*.max_dirty_mb 0
for i in `seq 10` ; do
dd if=/dev/zero of=$DIR/f63 bs=8k &
sleep 5
sleep 1
done
- lctl set_param -n osc.*.max_dirty_mb $MAX_DIRTY_MB
rm -f $DIR/f63 || true
}
run_test 63a "Verify oig_wait interruption does not crash ======="
}
run_test 102n "silently ignore setxattr on internal trusted xattrs"
+test_102p() { # LU-4703 setxattr did not check ownership
+ local testfile=$DIR/$tfile
+
+ [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.5.56) ] &&
+ skip "MDS needs to be at least 2.5.56" && return
+
+ touch $testfile
+
+ echo "setfacl as user..."
+ $RUNAS setfacl -m "u:$RUNAS_ID:rwx" $testfile
+ [ $? -ne 0 ] || error "setfacl by $RUNAS_ID was allowed on $testfile"
+
+ echo "setfattr as user..."
+ setfacl -m "u:$RUNAS_ID:---" $testfile
+ $RUNAS setfattr -x system.posix_acl_access $testfile
+ [ $? -ne 0 ] || error "setfattr by $RUNAS_ID was allowed on $testfile"
+}
+run_test 102p "check setxattr(2) correctly fails without permission"
+
run_acl_subtest()
{
$LUSTRE/tests/acl/run $LUSTRE/tests/acl/$1.test
test_120a() {
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
- test_mkdir -p $DIR/$tdir
+ test_mkdir -p $DIR/$tdir
[ -z "`lctl get_param -n mdc.*.connect_flags | grep early_lock_cancel`" ] && \
skip "no early lock cancel on server" && return 0
# asynchronous object destroy at MDT could cause bl ast to client
cancel_lru_locks osc
- stat $DIR/$tdir > /dev/null
- can1=`lctl get_param -n ldlm.services.ldlm_canceld.stats | awk '/ldlm_cancel/ {print $2}'`
- blk1=`lctl get_param -n ldlm.services.ldlm_cbd.stats | awk '/ldlm_bl_callback/ {print $2}'`
- test_mkdir $DIR/$tdir/d1
- can2=`lctl get_param -n ldlm.services.ldlm_canceld.stats | awk '/ldlm_cancel/ {print $2}'`
- blk2=`lctl get_param -n ldlm.services.ldlm_cbd.stats | awk '/ldlm_bl_callback/ {print $2}'`
+ stat $DIR/$tdir > /dev/null
+ can1=$(lctl get_param -n ldlm.services.ldlm_canceld.stats |
+ awk '/ldlm_cancel/ {print $2}')
+ blk1=$(lctl get_param -n ldlm.services.ldlm_cbd.stats |
+ awk '/ldlm_bl_callback/ {print $2}')
+ test_mkdir -c1 $DIR/$tdir/d1
+ can2=$(lctl get_param -n ldlm.services.ldlm_canceld.stats |
+ awk '/ldlm_cancel/ {print $2}')
+ blk2=$(lctl get_param -n ldlm.services.ldlm_cbd.stats |
+ awk '/ldlm_bl_callback/ {print $2}')
[ $can1 -eq $can2 ] || error $((can2-can1)) "cancel RPC occured."
[ $blk1 -eq $blk2 ] || error $((blk2-blk1)) "blocking RPC occured."
lru_resize_enable mdc
test_120b() {
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
- test_mkdir -p $DIR/$tdir
- [ -z "`lctl get_param -n mdc.*.connect_flags | grep early_lock_cancel`" ] && \
+ test_mkdir $DIR/$tdir
+ [ -z "$(lctl get_param -n mdc.*.connect_flags | grep early_lock_cancel)" ] && \
skip "no early lock cancel on server" && return 0
lru_resize_disable mdc
lru_resize_disable osc
test_120c() {
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
- test_mkdir -p $DIR/$tdir
- [ -z "`lctl get_param -n mdc.*.connect_flags | grep early_lock_cancel`" ] && \
- skip "no early lock cancel on server" && return 0
+ test_mkdir -c1 $DIR/$tdir
+ [ -z "$(lctl get_param -n mdc.*.connect_flags | grep early_lock_cancel)" ] && \
+ skip "no early lock cancel on server" && return 0
lru_resize_disable mdc
lru_resize_disable osc
- test_mkdir -p $DIR/$tdir/d1
- test_mkdir -p $DIR/$tdir/d2
+ test_mkdir -p -c1 $DIR/$tdir/d1
+ test_mkdir -p -c1 $DIR/$tdir/d2
touch $DIR/$tdir/d1/f1
cancel_lru_locks mdc
stat $DIR/$tdir/d1 $DIR/$tdir/d2 $DIR/$tdir/d1/f1 > /dev/null
test_120d() {
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
- test_mkdir -p $DIR/$tdir
- [ -z "`lctl get_param -n mdc.*.connect_flags | grep early_lock_cancel`" ] && \
- skip "no early lock cancel on server" && return 0
+ test_mkdir -p -c1 $DIR/$tdir
+ [ -z "$(lctl get_param -n mdc.*.connect_flags | grep early_lock_cancel)" ] && \
+ skip "no early lock cancel on server" && return 0
lru_resize_disable mdc
lru_resize_disable osc
touch $DIR/$tdir
test_120e() {
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
- test_mkdir -p $DIR/$tdir
+ test_mkdir -p -c1 $DIR/$tdir
[ -z "`lctl get_param -n mdc.*.connect_flags | grep early_lock_cancel`" ] && \
skip "no early lock cancel on server" && return 0
lru_resize_disable mdc
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
[ -z "`lctl get_param -n mdc.*.connect_flags | grep early_lock_cancel`" ] && \
skip "no early lock cancel on server" && return 0
- test_mkdir -p $DIR/$tdir
+ test_mkdir -p -c1 $DIR/$tdir
lru_resize_disable mdc
lru_resize_disable osc
- test_mkdir -p $DIR/$tdir/d1
- test_mkdir -p $DIR/$tdir/d2
+ test_mkdir -p -c1 $DIR/$tdir/d1
+ test_mkdir -p -c1 $DIR/$tdir/d2
dd if=/dev/zero of=$DIR/$tdir/d1/f1 count=1
dd if=/dev/zero of=$DIR/$tdir/d2/f2 count=1
cancel_lru_locks mdc
return
fi
remote_mds_nodsh && skip "remote MDS with nodsh" && return
-
ENOSPC=28
EFBIG=27
set_dir_limits $MAX
local I=$(stat -c%s "$DIR/$tdir")
local J=0
+ local STRIPE_COUNT=1
+ [ $MDSCOUNT -ge 2 ] && STRIPE_COUNT=$($LFS getdirstripe -c $DIR/$tdir)
+ MAX=$((MAX*STRIPE_COUNT))
while [ ! $I -gt $MAX ]; do
$MULTIOP $DIR/$tdir/$J Oc
rc=$?
done
set_dir_limits 0
- error "exceeded dir size limit $MAX x $MDSCOUNT $MAX : $I bytes"
+ error "exceeded dir size limit $MAX($MDSCOUNT) : $I bytes"
}
run_test 129 "test directory size limit ========================"
rm -f $test_dir/$tfile.1
echo "truncate fid $fid"
$TRUNCATE $ffid 777 || error "truncate $ffid failed."
- echo "link fid $fid"
- ln -f $ffid $test_dir/tfile.lnk || error "link $ffid failed."
+ if [ $MDSCOUNT -lt 2 ]; then #FIXME when cross-MDT hard link is working
+ echo "link fid $fid"
+ ln -f $ffid $test_dir/tfile.lnk || error "link $ffid failed."
+ fi
if [ -n $(lctl get_param -n mdc.*-mdc-*.connect_flags | grep acl) ]; then
echo "setfacl fid $fid"
setfacl -R -m u:bin:rwx $ffid || error "setfacl $ffid failed."
local rc=0
mkdir -p $DIR/$tdir
- $LFS mkdir -i $MDTIDX $remote_dir ||
+ $LFS mkdir -i $MDTIDX -c $MDSCOUNT $remote_dir ||
error "create remote directory failed"
cp /etc/hosts $remote_dir/$tfile
test_161a() {
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
- test_mkdir -p $DIR/$tdir
- cp /etc/hosts $DIR/$tdir/$tfile
- test_mkdir $DIR/$tdir/foo1
- test_mkdir $DIR/$tdir/foo2
- ln $DIR/$tdir/$tfile $DIR/$tdir/foo1/sofia
- ln $DIR/$tdir/$tfile $DIR/$tdir/foo2/zachary
- ln $DIR/$tdir/$tfile $DIR/$tdir/foo1/luna
- ln $DIR/$tdir/$tfile $DIR/$tdir/foo2/thor
+ test_mkdir -p -c1 $DIR/$tdir
+ cp /etc/hosts $DIR/$tdir/$tfile
+ test_mkdir -c1 $DIR/$tdir/foo1
+ test_mkdir -c1 $DIR/$tdir/foo2
+ ln $DIR/$tdir/$tfile $DIR/$tdir/foo1/sofia
+ ln $DIR/$tdir/$tfile $DIR/$tdir/foo2/zachary
+ ln $DIR/$tdir/$tfile $DIR/$tdir/foo1/luna
+ ln $DIR/$tdir/$tfile $DIR/$tdir/foo2/thor
local FID=$($LFS path2fid $DIR/$tdir/$tfile | tr -d '[]')
if [ "$($LFS fid2path $DIR $FID | wc -l)" != "5" ]; then
$LFS fid2path $DIR $FID
check_swap_layouts_support && return 0
dir0=$DIR/$tdir/$testnum
- test_mkdir -p $dir0 || error "creating dir $dir0"
+ test_mkdir -p -c1 $dir0 || error "creating dir $dir0"
ref1=/etc/passwd
ref2=/etc/group
file1=$dir0/f1
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
[ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
local MDTIDX=1
- local remote_dir=$DIR/$tdir/remote_dir
- local rc=0
+ local mdt_index
+ local i
+ local file
+ local pid
+ local stripe_count
+ local migrate_dir=$DIR/$tdir/migrate_dir
+ local other_dir=$DIR/$tdir/other_dir
+
+ mkdir -p $migrate_dir
+ mkdir -p $other_dir
+ for ((i=0; i<10; i++)); do
+ mkdir -p $migrate_dir/dir_${i}
+ createmany -o $migrate_dir/dir_${i}/f 10 ||
+ error "create files under remote dir failed $i"
+ done
+
+ cp /etc/passwd $migrate_dir/$tfile
+ cp /etc/passwd $other_dir/$tfile
+ mkdir -p $migrate_dir/dir_default_stripe2
+ $LFS setstripe -c 2 $migrate_dir/dir_default_stripe2
+ $LFS setstripe -c 2 $migrate_dir/${tfile}_stripe2
+
+ mkdir -p $other_dir
+ ln $migrate_dir/$tfile $other_dir/luna
+ ln $migrate_dir/$tfile $migrate_dir/sofia
+ ln $other_dir/$tfile $migrate_dir/david
+ ln -s $migrate_dir/$tfile $other_dir/zachary
+ ln -s $migrate_dir/$tfile $migrate_dir/${tfile}_ln
+ ln -s $other_dir/$tfile $migrate_dir/${tfile}_ln_other
+
+ $LFS mv -v -M $MDTIDX $migrate_dir ||
+ error "migrate remote dir error"
+
+ echo "migratate to MDT1, then checking.."
+ for ((i=0; i<10; i++)); do
+ for file in $(find $migrate_dir/dir_${i}); do
+ mdt_index=$($LFS getstripe -M $file)
+ [ $mdt_index == $MDTIDX ] ||
+ error "$file is not on MDT${MDTIDX}"
+ done
+ done
+
+ # the multiple link file should still in MDT0
+ mdt_index=$($LFS getstripe -M $migrate_dir/$tfile)
+ [ $mdt_index == 0 ] ||
+ error "$file is not on MDT${MDTIDX}"
+
+ diff /etc/passwd $migrate_dir/$tfile ||
+ error "$tfile different after migration"
+
+ diff /etc/passwd $other_dir/luna ||
+ error "luna different after migration"
+
+ diff /etc/passwd $migrate_dir/sofia ||
+ error "sofia different after migration"
+
+ diff /etc/passwd $migrate_dir/david ||
+ error "david different after migration"
+
+ diff /etc/passwd $other_dir/zachary ||
+ error "zachary different after migration"
+
+ diff /etc/passwd $migrate_dir/${tfile}_ln ||
+ error "${tfile}_ln different after migration"
+
+ diff /etc/passwd $migrate_dir/${tfile}_ln_other ||
+ error "${tfile}_ln_other different after migration"
+
+ stripe_count=$($LFS getstripe -c $migrate_dir/dir_default_stripe2)
+ [ $stripe_count = 2 ] ||
+ error "dir strpe_count $d != 2 after migration."
+
+ stripe_count=$($LFS getstripe -c $migrate_dir/${tfile}_stripe2)
+ [ $stripe_count = 2 ] ||
+ error "file strpe_count $d != 2 after migration."
+
+ #migrate back to MDT0
+ MDTIDX=0
+ $LFS mv -v -M $MDTIDX $migrate_dir ||
+ error "migrate remote dir error"
+
+ echo "migrate back to MDT0, checking.."
+ for file in $(find $migrate_dir); do
+ mdt_index=$($LFS getstripe -M $file)
+ [ $mdt_index == $MDTIDX ] ||
+ error "$file is not on MDT${MDTIDX}"
+ done
+
+ diff /etc/passwd ${migrate_dir}/$tfile ||
+ error "$tfile different after migration"
+
+ diff /etc/passwd ${other_dir}/luna ||
+ error "luna different after migration"
+
+ diff /etc/passwd ${migrate_dir}/sofia ||
+ error "sofia different after migration"
+
+ diff /etc/passwd ${other_dir}/zachary ||
+ error "zachary different after migration"
+
+ diff /etc/passwd $migrate_dir/${tfile}_ln ||
+ error "${tfile}_ln different after migration"
+
+ diff /etc/passwd $migrate_dir/${tfile}_ln_other ||
+ error "${tfile}_ln_other different after migration"
+
+ stripe_count=$($LFS getstripe -c ${migrate_dir}/dir_default_stripe2)
+ [ $stripe_count = 2 ] ||
+ error "dir strpe_count $d != 2 after migration."
+ stripe_count=$($LFS getstripe -c ${migrate_dir}/${tfile}_stripe2)
+ [ $stripe_count = 2 ] ||
+ error "file strpe_count $d != 2 after migration."
+
+ rm -rf $DIR/$tdir || error "rm dir failed after migration"
+}
+run_test 230b "migrate directory"
+
+test_230c() {
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+ local MDTIDX=1
+ local mdt_index
+ local file
+
+ #If migrating directory fails in the middle, all entries of
+ #the directory is still accessiable.
mkdir -p $DIR/$tdir
- $LFS mkdir -i $MDTIDX $remote_dir ||
- error "create remote directory failed"
+ stat $DIR/$tdir
+ createmany -o $DIR/$tdir/f 10 ||
+ error "create files under ${tdir} failed"
+
+ #failed after migrating 5 entries
+ #OBD_FAIL_MIGRATE_ENTRIES 0x1801
+ do_facet mds1 lctl set_param fail_loc=0x20001801
+ do_facet mds1 lctl set_param fail_val=5
+ local t=`ls $DIR/$tdir | wc -l`
+ $LFS mv -M $MDTIDX $DIR/$tdir &&
+ error "migrate should failed after 5 entries"
+ local u=`ls $DIR/$tdir | wc -l`
+ [ "$u" == "$t" ] || error "$u != $t during migration"
- $LFS mkdir -i 0 $remote_dir/new_dir &&
- error "nested remote directory create succeed!"
+ for file in $(find $DIR/$tdir); do
+ stat $file || error "stat $file failed"
+ done
- do_facet mds$((MDTIDX + 1)) lctl set_param mdt.*.enable_remote_dir=1
- $LFS mkdir -i 0 $remote_dir/new_dir || rc=$?
- do_facet mds$((MDTIDX + 1)) lctl set_param mdt.*.enable_remote_dir=0
+ do_facet mds1 lctl set_param fail_loc=0
+ do_facet mds1 lctl set_param fail_val=0
- [ $rc -ne 0 ] &&
- error "create remote directory failed after set enable_remote_dir"
+ $LFS mv -M $MDTIDX $DIR/$tdir ||
+ error "migrate open files should failed with open files"
+
+ echo "Finish migration, then checking.."
+ for file in $(find $DIR/$tdir); do
+ mdt_index=$($LFS getstripe -M $file)
+ [ $mdt_index == $MDTIDX ] ||
+ error "$file is not on MDT${MDTIDX}"
+ done
- rm -rf $remote_dir || error "first unlink remote directory failed"
+ rm -rf $DIR/$tdir || error "rm dir failed after migration"
+}
+run_test 230c "check directory accessiblity if migration is failed"
- $RUNAS -G$RUNAS_GID $LFS mkdir -i $MDTIDX $DIR/$tfile &&
- error "chown worked"
+test_230d() {
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+ local MDTIDX=1
+ local mdt_index
+ local i
+ local j
- do_facet mds$MDTIDX lctl set_param \
- mdt.*.enable_remote_dir_gid=$RUNAS_GID
- $LFS mkdir -i $MDTIDX $remote_dir || rc=$?
- do_facet mds$MDTIDX lctl set_param mdt.*.enable_remote_dir_gid=0
+ mkdir -p $DIR/$tdir
- [ $rc -ne 0 ] &&
- error "create remote dir failed after set enable_remote_dir_gid"
+ for ((i=0; i<100; i++)); do
+ mkdir -p $DIR/$tdir/dir_${i}
+ createmany -o $DIR/$tdir/dir_${i}/f 100 ||
+ error "create files under remote dir failed $i"
+ done
+
+ $LFS mv -M $MDTIDX -v $DIR/$tdir || error "migrate remote dir error"
- rm -r $DIR/$tdir || error "second unlink remote directory failed"
+ echo "Finish migration, then checking.."
+ for file in $(find $DIR/$tdir); do
+ mdt_index=$($LFS getstripe -M $file)
+ [ $mdt_index == $MDTIDX ] ||
+ error "$file is not on MDT${MDTIDX}"
+ done
+
+ rm -rf $DIR/$tdir || error "rm dir failed after migration"
}
-run_test 230b "nested remote directory should be failed"
+run_test 230d "check migrate big directory"
test_231a()
{
#LU-2935
test_236() {
check_swap_layouts_support && return 0
- test_mkdir -p $DIR/$tdir || error "mkdir $tdir failed"
+ test_mkdir -p -c1 $DIR/$tdir || error "mkdir $tdir failed"
local ref1=/etc/passwd
local ref2=/etc/group
}
run_test 237 "Verify name_to_handle_at/open_by_handle_at syscalls"
+test_striped_dir() {
+ local mdt_index=$1
+ local stripe_count
+ local stripe_index
+
+ mkdir -p $DIR/$tdir
+ $LFS setdirstripe -i $mdt_index -c 2 -t all_char $DIR/$tdir/striped_dir ||
+ error "set striped dir error"
+
+ stripe_count=$($LFS getdirstripe -c $DIR/$tdir/striped_dir)
+ if [ "$stripe_count" != "2" ]; then
+ error "stripe_count is $stripe_count, expect 2"
+ fi
+
+ stripe_index=$($LFS getdirstripe -i $DIR/$tdir/striped_dir)
+ if [ "$stripe_index" != "$mdt_index" ]; then
+ error "stripe_index is $stripe_index, expect $mdt_index"
+ fi
+
+ [ $(stat -c%h $DIR/$tdir/striped_dir) == '2' ] ||
+ error "nlink error after create striped dir"
+
+ mkdir $DIR/$tdir/striped_dir/a
+ mkdir $DIR/$tdir/striped_dir/b
+
+ stat $DIR/$tdir/striped_dir/a ||
+ error "create dir under striped dir failed"
+ stat $DIR/$tdir/striped_dir/b ||
+ error "create dir under striped dir failed"
+
+ [ $(stat -c%h $DIR/$tdir/striped_dir) == '4' ] ||
+ error "nlink error after mkdir"
+
+ rmdir $DIR/$tdir/striped_dir/a
+ [ $(stat -c%h $DIR/$tdir/striped_dir) == '3' ] ||
+ error "nlink error after rmdir"
+
+ rmdir $DIR/$tdir/striped_dir/b
+ [ $(stat -c%h $DIR/$tdir/striped_dir) == '2' ] ||
+ error "nlink error after rmdir"
+
+ rmdir $DIR/$tdir/striped_dir ||
+ error "rmdir striped dir error"
+ true
+}
+
+test_300a() {
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+
+ test_striped_dir 0 || error "failed on striped dir on MDT0"
+ test_striped_dir 1 || error "failed on striped dir on MDT0"
+}
+run_test 300a "basic striped dir sanity test"
+
+test_300b() {
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+ local i
+ local mtime1
+ local mtime2
+ local mtime3
+
+ test_mkdir $DIR/$tdir || error "mkdir fail"
+ $LFS setdirstripe -i 0 -c 2 -t all_char $DIR/$tdir/striped_dir ||
+ error "set striped dir error"
+ for ((i=0; i<10; i++)); do
+ mtime1=$(stat -c %Y $DIR/$tdir/striped_dir)
+ sleep 1
+ touch $DIR/$tdir/striped_dir/file_$i ||
+ error "touch error $i"
+ mtime2=$(stat -c %Y $DIR/$tdir/striped_dir)
+ [ $mtime1 -eq $mtime2 ] &&
+ error "mtime not change after create"
+ sleep 1
+ rm -f $DIR/$tdir/striped_dir/file_$i ||
+ error "unlink error $i"
+ mtime3=$(stat -c %Y $DIR/$tdir/striped_dir)
+ [ $mtime2 -eq $mtime3 ] &&
+ error "mtime did not change after unlink"
+ done
+ true
+}
+run_test 300b "check ctime/mtime for striped dir"
+
+test_300c() {
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+ local file_count
+
+ mkdir -p $DIR/$tdir
+ $LFS setdirstripe -i 0 -c 2 $DIR/$tdir/striped_dir ||
+ error "set striped dir error"
+
+ chown $RUNAS_ID:$RUNAS_GID $DIR/$tdir/striped_dir ||
+ error "chown striped dir failed"
+
+ $RUNAS createmany -o $DIR/$tdir/striped_dir/f 5000 ||
+ error "create 5k files failed"
+
+ file_count=$(ls $DIR/$tdir/striped_dir | wc -l)
+
+ [ "$file_count" = 5000 ] || error "file count $file_count != 5000"
+
+ rm -rf $DIR/$tdir
+}
+run_test 300c "chown && check ls under striped directory"
+
+test_300d() {
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+ local stripe_count
+ local file
+
+ mkdir -p $DIR/$tdir
+ $SETSTRIPE -c 2 $DIR/$tdir
+
+ #local striped directory
+ $LFS setdirstripe -i 0 -c 2 -t all_char $DIR/$tdir/striped_dir ||
+ error "set striped dir error"
+ createmany -o $DIR/$tdir/striped_dir/f 10 ||
+ error "create 10 files failed"
+
+ #remote striped directory
+ $LFS setdirstripe -i 1 -c 2 $DIR/$tdir/remote_striped_dir ||
+ error "set striped dir error"
+ createmany -o $DIR/$tdir/remote_striped_dir/f 10 ||
+ error "create 10 files failed"
+
+ for file in $(find $DIR/$tdir); do
+ stripe_count=$($GETSTRIPE -c $file)
+ [ $stripe_count -eq 2 ] ||
+ error "wrong stripe $stripe_count for $file"
+ done
+
+ rm -rf $DIR/$tdir
+}
+run_test 300d "check default stripe under striped directory"
+
+test_300e() {
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+ local stripe_count
+ local file
+
+ mkdir -p $DIR/$tdir
+
+ $LFS setdirstripe -i 0 -c 2 -t all_char $DIR/$tdir/striped_dir ||
+ error "set striped dir error"
+
+ touch $DIR/$tdir/striped_dir/a
+ touch $DIR/$tdir/striped_dir/b
+ touch $DIR/$tdir/striped_dir/c
+
+ mkdir $DIR/$tdir/striped_dir/dir_a
+ mkdir $DIR/$tdir/striped_dir/dir_b
+ mkdir $DIR/$tdir/striped_dir/dir_c
+
+ $LFS setdirstripe -i 0 -c 2 -t all_char $DIR/$tdir/striped_dir/stp_a ||
+ error "set striped dir under striped dir error"
+
+ $LFS setdirstripe -i 0 -c 2 -t all_char $DIR/$tdir/striped_dir/stp_b ||
+ error "set striped dir under striped dir error"
+
+ $LFS setdirstripe -i 0 -c 2 -t all_char $DIR/$tdir/striped_dir/stp_c ||
+ error "set striped dir under striped dir error"
+
+ mrename $DIR/$tdir/striped_dir/a $DIR/$tdir/striped_dir/b &&
+ error "rename file under striped dir should fail"
+
+ mrename $DIR/$tdir/striped_dir/dir_a $DIR/$tdir/striped_dir/dir_b &&
+ error "rename dir under striped dir should fail"
+
+ mrename $DIR/$tdir/striped_dir/stp_a $DIR/$tdir/striped_dir/stp_b &&
+ error "rename dir under different stripes should fail"
+
+ mrename $DIR/$tdir/striped_dir/a $DIR/$tdir/striped_dir/c ||
+ error "rename file under striped dir should succeed"
+
+ mrename $DIR/$tdir/striped_dir/dir_a $DIR/$tdir/striped_dir/dir_c ||
+ error "rename dir under striped dir should succeed"
+
+ rm -rf $DIR/$tdir
+}
+run_test 300e "check rename under striped directory"
+
+test_300f() {
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+ local stripe_count
+ local file
+
+ rm -rf $DIR/$tdir
+ mkdir -p $DIR/$tdir
+
+ $LFS setdirstripe -i 0 -c 2 -t all_char $DIR/$tdir/striped_dir ||
+ error "set striped dir error"
+
+ $LFS setdirstripe -i 0 -c 2 -t all_char $DIR/$tdir/striped_dir1 ||
+ error "set striped dir error"
+
+ touch $DIR/$tdir/striped_dir/a
+ mkdir $DIR/$tdir/striped_dir/dir_a
+ $LFS setdirstripe -i 0 -c 2 $DIR/$tdir/striped_dir/stp_a ||
+ error "create striped dir under striped dir fails"
+
+ touch $DIR/$tdir/striped_dir1/b
+ mkdir $DIR/$tdir/striped_dir1/dir_b
+ $LFS setdirstripe -i 0 -c 2 $DIR/$tdir/striped_dir/stp_b ||
+ error "create striped dir under striped dir fails"
+
+ mrename $DIR/$tdir/striped_dir/a $DIR/$tdir/striped_dir1/b &&
+ error "rename file under different striped dir should fail"
+
+ mrename $DIR/$tdir/striped_dir/dir_a $DIR/$tdir/striped_dir1/dir_b &&
+ error "rename dir under different striped dir should fail"
+
+ mrename $DIR/$tdir/striped_dir/stp_a $DIR/$tdir/striped_dir1/stp_b &&
+ error "rename striped dir under diff striped dir should fail"
+
+ mrename $DIR/$tdir/striped_dir/a $DIR/$tdir/striped_dir1/a ||
+ error "rename file under diff striped dirs fails"
+
+ mrename $DIR/$tdir/striped_dir/dir_a $DIR/$tdir/striped_dir1/dir_a ||
+ error "rename dir under diff striped dirs fails"
+
+ rm -rf $DIR/$tdir
+}
+run_test 300f "check rename cross striped directory"
+
#
# tests that do cleanup/setup should be run at the end
#
run_test 900 "umount should not race with any mgc requeue thread"
complete $SECONDS
+[ -f $EXT2_DEV ] && rm $EXT2_DEV || true
check_and_cleanup_lustre
if [ "$I_MOUNTED" != "yes" ]; then
lctl set_param debug="$OLDDEBUG" 2> /dev/null || true