Whamcloud - gitweb
LU-5319 mdc: manage number of modify RPCs in flight
[fs/lustre-release.git] / lustre / tests / sanity.sh
index 9ac5f84..679a528 100644 (file)
@@ -58,11 +58,11 @@ init_test_env $@
 . ${CONFIG:=$LUSTRE/tests/cfg/${NAME}.sh}
 init_logging
 
-[ "$SLOW" = "no" ] && EXCEPT_SLOW="24o 24D 27m 64b 68 71 77f 78 115 124b 230d"
+[ "$SLOW" = "no" ] && EXCEPT_SLOW="24o 24D 27m 64b 68 71 77f 78 115 124b"
 
 if [ $(facet_fstype $SINGLEMDS) = "zfs" ]; then
-       # bug number for skipped test: LU-4536 LU-5242   LU-1957 LU-2805
-       ALWAYS_EXCEPT="$ALWAYS_EXCEPT  65ic     78 79 80 180     184c"
+       # bug number for skipped test: LU-4536 LU-1957 LU-2805
+       ALWAYS_EXCEPT="$ALWAYS_EXCEPT  65ic    180     184c"
        [ "$SLOW" = "no" ] && EXCEPT_SLOW="$EXCEPT_SLOW 51b 51ba"
 fi
 
@@ -80,17 +80,6 @@ setup() {
        echo "done"
 }
 
-check_kernel_version() {
-       WANT_VER=$1
-       GOT_VER=$(lctl get_param -n version | awk '/kernel:/ {print $2}')
-       case $GOT_VER in
-       patchless|patchless_client) return 0;;
-       *) [ $GOT_VER -ge $WANT_VER ] && return 0 ;;
-       esac
-       log "test needs at least kernel version $WANT_VER, running $GOT_VER"
-       return 1
-}
-
 check_swap_layouts_support()
 {
        $LCTL get_param -n llite.*.sbi_flags | grep -q layout ||
@@ -98,11 +87,6 @@ check_swap_layouts_support()
        return 1
 }
 
-if [ "$ONLY" == "cleanup" ]; then
-       sh llmountcleanup.sh
-       exit 0
-fi
-
 check_and_setup_lustre
 
 DIR=${DIR:-$MOUNT}
@@ -292,7 +276,7 @@ run_test 7a "mkdir .../d7; mcreate .../d7/f; chmod .../d7/f ===="
 
 test_7b() {
        if [ ! -d $DIR/$tdir ]; then
-               mkdir $DIR/$tdir
+               test_mkdir $DIR/$tdir
        fi
        $MCREATE $DIR/$tdir/$tfile
        echo -n foo > $DIR/$tdir/$tfile
@@ -370,6 +354,7 @@ test_15() {
        mv $DIR/$tdir/$tfile $DIR/$tdir/${tfile}_2
        $CHECKSTAT -t file $DIR/$tdir/${tfile}_2 ||
                error "$tdir/${tfile_2} not a file after rename"
+       rm $DIR/$tdir/${tfile}_2 || error "unlink failed after rename"
 }
 run_test 15 "touch .../d15/f; mv .../d15/f .../d15/f2 =========="
 
@@ -535,7 +520,7 @@ run_test 17k "symlinks: rsync with xattrs enabled ========================="
 test_17l() { # LU-279
        [[ -z "$(which getfattr 2>/dev/null)" ]] &&
                skip "no getfattr command" && return 0
-       mkdir -p $DIR/$tdir
+       test_mkdir -p $DIR/$tdir
        touch $DIR/$tdir/$tfile
        ln -s $DIR/$tdir/$tfile $DIR/$tdir/$tfile.lnk
        for path in "$DIR/$tdir" "$DIR/$tdir/$tfile" "$DIR/$tdir/$tfile.lnk"; do
@@ -570,7 +555,7 @@ test_17m() {
 
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
 
-       mkdir -p $WDIR
+       test_mkdir -p $WDIR
        long_sym=$short_sym
        # create a long symlink file
        for ((i = 0; i < 4; ++i)); do
@@ -653,7 +638,7 @@ test_17n() {
 
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
 
-       mkdir $DIR/$tdir
+       test_mkdir $DIR/$tdir
        for ((i=0; i<10; i++)); do
                $LFS mkdir -i1 -c2 $DIR/$tdir/remote_dir_${i} ||
                        error "create remote dir error $i"
@@ -700,18 +685,17 @@ test_17o() {
 
        local WDIR=$DIR/${tdir}o
        local mdt_index
-       local mdtdevname
        local rc=0
 
-       mkdir -p $WDIR
+       test_mkdir -p $WDIR
        mdt_index=$($LFS getstripe -M $WDIR)
        mdt_index=$((mdt_index+1))
-       mdtdevname=$(mdsdevname $mdt_index)
 
        touch $WDIR/$tfile
-       stop mds${mdt_index}
-       start mds${mdt_index} $mdtdevname $MDS_MOUNT_OPTS ||
-               error "mount mds${mdt_index} failed"
+
+       #fail mds will wait the failover finish then set
+       #following fail_loc to avoid interfer the recovery process.
+       fail mds${mdt_index}
 
        #define OBD_FAIL_OSD_LMA_INCOMPAT 0x194
        do_facet mds${mdt_index} lctl set_param fail_loc=0x194
@@ -955,7 +939,6 @@ test_24n() {
 run_test 24n "Statting the old file after renaming (Posix rename 2)"
 
 test_24o() {
-       check_kernel_version 37 || return 0
        test_mkdir -p $DIR/d24o
        rename_many -s random -v -n 10 $DIR/d24o
 }
@@ -1058,7 +1041,7 @@ test_24v() {
        # Performance issue on ZFS see LU-4072 (c.f. LU-2887)
        [ $(facet_fstype $SINGLEMDS) = "zfs" ] && NRFILES=10000
 
-       mkdir -p $DIR/$tdir
+       test_mkdir -p $DIR/$tdir
        createmany -m $DIR/$tdir/$tfile $NRFILES
 
        cancel_lru_locks mdc
@@ -1101,30 +1084,28 @@ test_24x() {
        local MDTIDX=1
        local remote_dir=$DIR/$tdir/remote_dir
 
-       mkdir -p $DIR/$tdir
+       test_mkdir -p $DIR/$tdir
        $LFS mkdir -i $MDTIDX $remote_dir ||
                error "create remote directory failed"
 
-       mkdir -p $DIR/$tdir/src_dir
+       test_mkdir -p $DIR/$tdir/src_dir
        touch $DIR/$tdir/src_file
-       mkdir -p $remote_dir/tgt_dir
+       test_mkdir -p $remote_dir/tgt_dir
        touch $remote_dir/tgt_file
 
-       mrename $remote_dir $DIR/ &&
-               error "rename dir cross MDT works!"
-
-       mrename $DIR/$tdir/src_dir $remote_dir/tgt_dir &&
-               error "rename dir cross MDT works!"
+       mrename $DIR/$tdir/src_dir $remote_dir/tgt_dir ||
+               error "rename dir cross MDT failed!"
 
-       mrename $DIR/$tdir/src_file $remote_dir/tgt_file &&
-               error "rename file cross MDT works!"
+       mrename $DIR/$tdir/src_file $remote_dir/tgt_file ||
+               error "rename file cross MDT failed!"
 
-       ln $DIR/$tdir/src_file $remote_dir/tgt_file1 &&
-               error "ln file cross MDT should not work!"
+       touch $DIR/$tdir/ln_file
+       ln $DIR/$tdir/ln_file $remote_dir/ln_name ||
+               error "ln file cross MDT failed"
 
        rm -rf $DIR/$tdir || error "Can not delete directories"
 }
-run_test 24x "cross rename/link should be failed"
+run_test 24x "cross MDT rename/link"
 
 test_24y() {
        [[ $MDSCOUNT -lt 2 ]] && skip "needs >= 2 MDTs" && return
@@ -1132,13 +1113,13 @@ test_24y() {
        local MDTIDX=1
        local remote_dir=$DIR/$tdir/remote_dir
 
-       mkdir -p $DIR/$tdir
+       test_mkdir -p $DIR/$tdir
        $LFS mkdir -i $MDTIDX $remote_dir ||
                   error "create remote directory failed"
 
-       mkdir -p $remote_dir/src_dir
+       test_mkdir -p $remote_dir/src_dir
        touch $remote_dir/src_file
-       mkdir -p $remote_dir/tgt_dir
+       test_mkdir -p $remote_dir/tgt_dir
        touch $remote_dir/tgt_file
 
        mrename $remote_dir/src_dir $remote_dir/tgt_dir ||
@@ -1154,37 +1135,11 @@ test_24y() {
 }
 run_test 24y "rename/link on the same dir should succeed"
 
-test_24z() {
-       [[ $MDSCOUNT -lt 2 ]] && skip "needs >= 2 MDTs" && return
-       [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-       local MDTIDX=1
-       local remote_src=$DIR/$tdir/remote_dir
-       local remote_tgt=$DIR/$tdir/remote_tgt
-
-       mkdir -p $DIR/$tdir
-       $LFS mkdir -i $MDTIDX $remote_src ||
-                  error "create remote directory failed"
-
-       $LFS mkdir -i $MDTIDX $remote_tgt ||
-                  error "create remote directory failed"
-
-       mrename $remote_src $remote_tgt &&
-               error "rename remote dirs should not work!"
-
-       # If target dir does not exists, it should succeed
-       rm -rf $remote_tgt
-       mrename $remote_src $remote_tgt ||
-               error "rename remote dirs(tgt dir does not exists) failed!"
-
-       rm -rf $DIR/$tdir || error "Can not delete directories"
-}
-run_test 24z "rename one remote dir to another remote dir should fail"
-
 test_24A() { # LU-3182
        local NFILES=5000
 
        rm -rf $DIR/$tdir
-       mkdir -p $DIR/$tdir
+       test_mkdir -p $DIR/$tdir
        createmany -m $DIR/$tdir/$tfile $NFILES
        local t=$(ls $DIR/$tdir | wc -l)
        local u=$(ls $DIR/$tdir | sort -u | wc -l)
@@ -1201,7 +1156,7 @@ test_24B() { # LU-4805
        [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
        local count
 
-       mkdir $DIR/$tdir
+       test_mkdir $DIR/$tdir
        $LFS setdirstripe -i0 -c$MDSCOUNT $DIR/$tdir/striped_dir ||
                error "create striped dir failed"
 
@@ -1268,6 +1223,38 @@ test_24D() { # LU-6101
 }
 run_test 24D "readdir() returns correct number of entries after cursor reload"
 
+test_24E() {
+       [[ $MDSCOUNT -lt 4 ]] && skip "needs >= 4 MDTs" && return
+       [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+
+       mkdir -p $DIR/$tdir
+       mkdir $DIR/$tdir/src_dir
+       $LFS mkdir -i 1 $DIR/$tdir/src_dir/src_child ||
+               error "create remote source failed"
+
+       touch $DIR/$tdir/src_dir/src_child/a
+
+       $LFS mkdir -i 2 $DIR/$tdir/tgt_dir ||
+               error "create remote target dir failed"
+
+       $LFS mkdir -i 3 $DIR/$tdir/tgt_dir/tgt_child ||
+               error "create remote target child failed"
+
+       mrename $DIR/$tdir/src_dir/src_child $DIR/$tdir/tgt_dir/tgt_child ||
+               error "rename dir cross MDT failed!"
+
+       find $DIR/$tdir
+
+       $CHECKSTAT -t dir $DIR/$tdir/src_dir/src_child &&
+               error "src_child still exists after rename"
+
+       $CHECKSTAT -t file $DIR/$tdir/tgt_dir/tgt_child/a ||
+               error "missing file(a) after rename"
+
+       rm -rf $DIR/$tdir || error "Can not delete directories"
+}
+run_test 24E "cross MDT rename/link"
+
 test_25a() {
        echo '== symlink sanity ============================================='
 
@@ -1774,7 +1761,7 @@ test_27y() {
        done
 
        OSTIDX=$(index_from_ostuuid $OST)
-       mkdir -p $DIR/$tdir
+       test_mkdir -p $DIR/$tdir
        $SETSTRIPE -c 1 $DIR/$tdir      # 1 stripe / file
 
        for OSC in $MDS_OSCS; do
@@ -2028,7 +2015,7 @@ test_27D() {
        local ost_list=$(seq $first_ost $ost_step $last_ost)
        local ost_range="$first_ost $last_ost $ost_step"
 
-       mkdir -p $DIR/$tdir
+       test_mkdir -p $DIR/$tdir
        pool_add $POOL || error "pool_add failed"
        pool_add_targets $POOL $ost_range || error "pool_add_targets failed"
        llapi_layout_test -d$DIR/$tdir -p$POOL -o$OSTCOUNT ||
@@ -2181,7 +2168,6 @@ test_31d() {
 run_test 31d "remove of open directory ========================="
 
 test_31e() { # bug 2904
-       check_kernel_version 34 || return 0
        openfilleddirunlink $DIR/d31e || error
 }
 run_test 31e "remove of open non-empty directory ==============="
@@ -2323,7 +2309,7 @@ link_one() {
 }
 
 test_31o() { # LU-2901
-       mkdir -p $DIR/$tdir
+       test_mkdir -p $DIR/$tdir
        for LOOP in $(seq 100); do
                rm -f $DIR/$tdir/$tfile*
                for THREAD in $(seq 8); do
@@ -2341,7 +2327,7 @@ run_test 31o "duplicate hard links with same filename"
 test_31p() {
        [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
 
-       mkdir $DIR/$tdir
+       test_mkdir $DIR/$tdir
        $LFS setdirstripe -i0 -c2 $DIR/$tdir/striped_dir
        $LFS setdirstripe -D -c2 -t all_char $DIR/$tdir/striped_dir
 
@@ -2694,7 +2680,7 @@ test_33d() {
        local MDTIDX=1
        local remote_dir=$DIR/$tdir/remote_dir
 
-       mkdir -p $DIR/$tdir
+       test_mkdir -p $DIR/$tdir
        $LFS mkdir -i $MDTIDX $remote_dir ||
                error "create remote directory failed"
 
@@ -3013,7 +2999,7 @@ run_test 36h "utime on file racing with OST BRW write =========="
 test_36i() {
        [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
 
-       mkdir $DIR/$tdir
+       test_mkdir $DIR/$tdir
        $LFS setdirstripe -i0 -c$MDSCOUNT $DIR/$tdir/striped_dir
 
        local mtime=$(stat -c%Y $DIR/$tdir/striped_dir)
@@ -3430,7 +3416,7 @@ run_test 39n "check that O_NOATIME is honored"
 test_39o() {
        TESTDIR=$DIR/$tdir/$tfile
        [ -e $TESTDIR ] && rm -rf $TESTDIR
-       test_mkdir -p $TESTDIR
+       mkdir -p $TESTDIR
        cd $TESTDIR
        links1=2
        ls
@@ -3452,7 +3438,7 @@ test_39p() {
        local MDTIDX=1
        TESTDIR=$DIR/$tdir/$tfile
        [ -e $TESTDIR ] && rm -rf $TESTDIR
-       mkdir -p $TESTDIR
+       test_mkdir -p $TESTDIR
        cd $TESTDIR
        links1=2
        ls
@@ -3876,19 +3862,14 @@ test_48a() { # bug 2399
        [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.3.63) ] &&
                skip "MDS prior to 2.3.63 handle ZFS dir .. incorrectly" &&
                return
-       check_kernel_version 34 || return 0
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        cd $DIR/$tdir
-       mv $DIR/$tdir $DIR/d48.new || error "move directory failed"
+       mv $DIR/$tdir $DIR/$tdir.new || error "move directory failed"
        test_mkdir $DIR/$tdir || error "recreate directory failed"
        touch foo || error "'touch foo' failed after recreating cwd"
-       test_mkdir $DIR/$tdir/bar ||
-                    error "'mkdir foo' failed after recreating cwd"
-       if check_kernel_version 44; then
-               touch .foo || error "'touch .foo' failed after recreating cwd"
-               test_mkdir $DIR/$tdir/.bar ||
-                             error "'mkdir .foo' failed after recreating cwd"
-       fi
+       test_mkdir bar || error "'mkdir foo' failed after recreating cwd"
+       touch .foo || error "'touch .foo' failed after recreating cwd"
+       test_mkdir .bar || error "'mkdir .foo' failed after recreating cwd"
        ls . > /dev/null || error "'ls .' failed after recreating cwd"
        ls .. > /dev/null || error "'ls ..' failed after removing cwd"
        cd . || error "'cd .' failed after recreating cwd"
@@ -3900,23 +3881,18 @@ test_48a() { # bug 2399
 run_test 48a "Access renamed working dir (should return errors)="
 
 test_48b() { # bug 2399
-       check_kernel_version 34 || return 0
        rm -rf $DIR/$tdir
-       test_mkdir -p $DIR/$tdir
+       test_mkdir $DIR/$tdir
        cd $DIR/$tdir
        rmdir $DIR/$tdir || error "remove cwd $DIR/$tdir failed"
        touch foo && error "'touch foo' worked after removing cwd"
-       test_mkdir $DIR/$tdir/foo &&
-                    error "'mkdir foo' worked after removing cwd"
-       if check_kernel_version 44; then
-               touch .foo && error "'touch .foo' worked after removing cwd"
-               test_mkdir $DIR/$tdir/.foo &&
-                             error "'mkdir .foo' worked after removing cwd"
-       fi
+       test_mkdir foo && error "'mkdir foo' worked after removing cwd"
+       touch .foo && error "'touch .foo' worked after removing cwd"
+       test_mkdir .foo && error "'mkdir .foo' worked after removing cwd"
        ls . > /dev/null && error "'ls .' worked after removing cwd"
        ls .. > /dev/null || error "'ls ..' failed after removing cwd"
        is_patchless || ( cd . && error "'cd .' worked after removing cwd" )
-       test_mkdir $DIR/$tdir/. && error "'mkdir .' worked after removing cwd"
+       test_mkdir . && error "'mkdir .' worked after removing cwd"
        rmdir . && error "'rmdir .' worked after removing cwd"
        ln -s . foo && error "'ln -s .' worked after removing cwd"
        cd .. || echo "'cd ..' failed after removing cwd `pwd`"  #bug 3517
@@ -3924,7 +3900,6 @@ test_48b() { # bug 2399
 run_test 48b "Access removed working dir (should return errors)="
 
 test_48c() { # bug 2350
-       check_kernel_version 36 || return 0
        #lctl set_param debug=-1
        #set -vx
        rm -rf $DIR/$tdir
@@ -3933,10 +3908,8 @@ test_48c() { # bug 2350
        $TRACE rmdir $DIR/$tdir/dir || error "remove cwd $DIR/$tdir/dir failed"
        $TRACE touch foo && error "touch foo worked after removing cwd"
        $TRACE test_mkdir foo && error "'mkdir foo' worked after removing cwd"
-       if check_kernel_version 44; then
-               touch .foo && error "touch .foo worked after removing cwd"
-               test_mkdir .foo && error "mkdir .foo worked after removing cwd"
-       fi
+       touch .foo && error "touch .foo worked after removing cwd"
+       test_mkdir .foo && error "mkdir .foo worked after removing cwd"
        $TRACE ls . && error "'ls .' worked after removing cwd"
        $TRACE ls .. || error "'ls ..' failed after removing cwd"
        is_patchless || ( $TRACE cd . &&
@@ -3949,7 +3922,6 @@ test_48c() { # bug 2350
 run_test 48c "Access removed working subdir (should return errors)"
 
 test_48d() { # bug 2350
-       check_kernel_version 36 || return 0
        #lctl set_param debug=-1
        #set -vx
        rm -rf $DIR/$tdir
@@ -3959,11 +3931,8 @@ test_48d() { # bug 2350
        $TRACE rmdir $DIR/$tdir || error "remove parent $DIR/$tdir failed"
        $TRACE touch foo && error "'touch foo' worked after removing parent"
        $TRACE test_mkdir foo && error "mkdir foo worked after removing parent"
-       if check_kernel_version 44; then
-               touch .foo && error "'touch .foo' worked after removing parent"
-               test_mkdir .foo &&
-                             error "mkdir .foo worked after removing parent"
-       fi
+       touch .foo && error "'touch .foo' worked after removing parent"
+       test_mkdir .foo && error "mkdir .foo worked after removing parent"
        $TRACE ls . && error "'ls .' worked after removing parent"
        $TRACE ls .. && error "'ls ..' worked after removing parent"
        is_patchless || ( $TRACE cd . &&
@@ -3977,7 +3946,6 @@ test_48d() { # bug 2350
 run_test 48d "Access removed parent subdir (should return errors)"
 
 test_48e() { # bug 4134
-       check_kernel_version 41 || return 0
        #lctl set_param debug=-1
        #set -vx
        rm -rf $DIR/$tdir
@@ -4367,7 +4335,6 @@ test_54d() {
 run_test 54d "fifo device works in lustre ======================"
 
 test_54e() {
-       check_kernel_version 46 || return 0
        f="$DIR/f54e"
        string="aaaaaa"
        cp -aL /dev/console $f
@@ -4963,7 +4930,7 @@ test_56x() {
                skip_env "need 2 OST, skipping test" && return
 
        local dir0=$DIR/$tdir/$testnum
-       mkdir -p $dir0 || error "creating dir $dir0"
+       test_mkdir -p $dir0 || error "creating dir $dir0"
 
        local ref1=/etc/passwd
        local file1=$dir0/file1
@@ -4982,12 +4949,12 @@ run_test 56x "lfs migration support"
 
 test_56y() {
        [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.4.53) ] &&
-               skip "No HSM support on MDS of $(get_lustre_version)," \
-                        "need 2.4.53 at least" && return
-       local res=""
+               skip "No HSM $(lustre_build_version $SINGLEMDS) MDS < 2.4.53" &&
+               return
 
+       local res=""
        local dir0=$DIR/$tdir/$testnum
-       mkdir -p $dir0 || error "creating dir $dir0"
+       test_mkdir -p $dir0 || error "creating dir $dir0"
        local f1=$dir0/file1
        local f2=$dir0/file2
 
@@ -5028,7 +4995,7 @@ test_56z() { # LU-4824
                error "$LFS find did not return an error"
        # Make a directory unsearchable. This should NOT be the last entry in
        # directory order.  Arbitrarily pick the 6th entry
-       chmod 700 $(lfs find $DIR/$tdir -type d | sed '6!d')
+       chmod 700 $($LFS find $DIR/$tdir -type d | sed '6!d')
        local count=$($RUNAS $LFS find $DIR/non_existent $DIR/$tdir | wc -l)
        # The user should be able to see 10 directories and 9 files
        [ $count == 19 ] || error "$LFS find did not continue after error"
@@ -5265,6 +5232,8 @@ test_63b() {
        dd if=/dev/zero of=$DIR/$tfile bs=4k count=1
        rm $DIR/$tfile
 
+       sync    # sync lest earlier test intercept the fail_loc
+
        #define OBD_FAIL_OSC_BRW_PREP_REQ        0x406
        lctl set_param fail_loc=0x80000406
        $MULTIOP $DIR/$tfile Owy && \
@@ -5603,8 +5572,9 @@ test_69() {
 run_test 69 "verify oa2dentry return -ENOENT doesn't LBUG ======"
 
 test_71() {
-    test_mkdir -p $DIR/$tdir
-    sh rundbench -C -D $DIR/$tdir 2 || error "dbench failed!"
+       test_mkdir -p $DIR/$tdir
+       $LFS setdirstripe -D -c$MDSCOUNT $DIR/$tdir
+       sh rundbench -C -D $DIR/$tdir 2 || error "dbench failed!"
 }
 run_test 71 "Running dbench on lustre (don't segment fault) ===="
 
@@ -5975,7 +5945,7 @@ test_78() { # bug 10901
        [[ $F78SIZE -gt $MEMTOTAL ]] && F78SIZE=$MEMTOTAL
        [[ $F78SIZE -gt 512 ]] && F78SIZE=512
        [[ $F78SIZE -gt $((MAXFREE / 1024)) ]] && F78SIZE=$((MAXFREE / 1024))
-       SMALLESTOST=$(lfs df $DIR | grep OST | awk '{ print $4 }' | sort -n |
+       SMALLESTOST=$($LFS df $DIR | grep OST | awk '{ print $4 }' | sort -n |
                head -n1)
        echo "Smallest OST: $SMALLESTOST"
        [[ $SMALLESTOST -lt 10240 ]] &&
@@ -6670,14 +6640,14 @@ compare_stripe_info1() {
                        for offset in $(seq 0 $[$STRIPE_COUNT - 1]); do
                                local size=$((STRIPE_SIZE * num))
                                local file=file"$num-$offset-$count"
-                               stripe_size=$(lfs getstripe -S $PWD/$file)
+                               stripe_size=$($LFS getstripe -S $PWD/$file)
                                [[ $stripe_size -ne $size ]] &&
                                    error "$file: size $stripe_size != $size"
-                               stripe_count=$(lfs getstripe -c $PWD/$file)
+                               stripe_count=$($LFS getstripe -c $PWD/$file)
                                # allow fewer stripes to be created, ORI-601
                                [[ $stripe_count -lt $(((3 * count + 3) / 4)) ]] &&
                                    error "$file: count $stripe_count != $count"
-                               stripe_index=$(lfs getstripe -i $PWD/$file)
+                               stripe_index=$($LFS getstripe -i $PWD/$file)
                                [[ $stripe_index -ne 0 ]] &&
                                        stripe_index_all_zero=false
                        done
@@ -6972,15 +6942,41 @@ test_102p() { # LU-4703 setxattr did not check ownership
 run_test 102p "check setxattr(2) correctly fails without permission"
 
 test_102q() {
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.6.92) ] &&
+               skip "MDS needs to be at least 2.6.92" && return
        orphan_linkea_check $DIR/$tfile || error "orphan_linkea_check"
 }
 run_test 102q "flistxattr should not return trusted.link EAs for orphans"
 
 test_102r() {
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.6.93) ] &&
+               skip "MDS needs to be at least 2.6.93" && return
        touch $DIR/$tfile || error "touch"
        setfattr -n user.$(basename $tfile) $DIR/$tfile || error "setfattr"
        getfattr -n user.$(basename $tfile) $DIR/$tfile || error "getfattr"
        rm $DIR/$tfile || error "rm"
+
+       #normal directory
+       mkdir -p $DIR/$tdir || error "mkdir"
+       setfattr -n user.$(basename $tdir) $DIR/$tdir || error "setfattr dir"
+       getfattr -n user.$(basename $tdir) $DIR/$tdir || error "getfattr dir"
+       setfattr -x user.$(basename $tdir) $DIR/$tdir ||
+               error "$testfile error deleting user.author1"
+       getfattr -d -m user.$(basename $tdir) 2> /dev/null |
+               grep "user.$(basename $tdir)" &&
+               error "$tdir did not delete user.$(basename $tdir)"
+       rmdir $DIR/$tdir || error "rmdir"
+
+       #striped directory
+       test_mkdir -p $DIR/$tdir || error "make striped dir"
+       setfattr -n user.$(basename $tdir) $DIR/$tdir || error "setfattr dir"
+       getfattr -n user.$(basename $tdir) $DIR/$tdir || error "getfattr dir"
+       setfattr -x user.$(basename $tdir) $DIR/$tdir ||
+               error "$testfile error deleting user.author1"
+       getfattr -d -m user.$(basename $tdir) 2> /dev/null |
+               grep "user.$(basename $tdir)" &&
+               error "$tdir did not delete user.$(basename $tdir)"
+       rmdir $DIR/$tdir || error "rm striped dir"
 }
 run_test 102r "set EAs with empty values"
 
@@ -8430,6 +8426,38 @@ test_124b() {
 }
 run_test 124b "lru resize (performance test) ======================="
 
+test_124c() {
+       [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+       [ -z "$($LCTL get_param -n mdc.*.connect_flags | grep lru_resize)" ] &&
+               skip "no lru resize on server" && return 0
+
+       # cache ununsed locks on client
+       local nr=100
+       cancel_lru_locks mdc
+       test_mkdir -p $DIR/$tdir || error "failed to create $DIR/$tdir"
+       createmany -o $DIR/$tdir/f $nr ||
+               error "failed to create $nr files in $DIR/$tdir"
+       ls -l $DIR/$tdir > /dev/null
+
+       local nsdir="ldlm.namespaces.*-MDT0000-mdc-*"
+       local unused=$($LCTL get_param -n $nsdir.lock_unused_count)
+       local max_age=$($LCTL get_param -n $nsdir.lru_max_age)
+       local recalc_p=$($LCTL get_param -n $nsdir.pool.recalc_period)
+       echo "unused=$unused, max_age=$max_age, recalc_p=$recalc_p"
+
+       # set lru_max_age to 1 sec
+       $LCTL set_param $nsdir.lru_max_age=1000 # jiffies
+       echo "sleep $((recalc_p * 2)) seconds..."
+       sleep $((recalc_p * 2))
+
+       local remaining=$($LCTL get_param -n $nsdir.lock_unused_count)
+       # restore lru_max_age
+       $LCTL set_param -n $nsdir.lru_max_age $max_age
+       [ $remaining -eq 0 ] || error "$remaining locks are not canceled"
+       unlinkmany $DIR/$tdir/f $nr
+}
+run_test 124c "LRUR cancel very aged locks"
+
 test_125() { # 13358
        [ -z "$(lctl get_param -n llite.*.client_type | grep local)" ] && skip "must run as local client" && return
        [ -z "$(lctl get_param -n mdc.*-mdc-*.connect_flags | grep acl)" ] && skip "must have acl enabled" && return
@@ -9703,7 +9731,7 @@ test_154A() {
        [ -z "$FID" ] && error "path2fid unable to get $DIR/$tfile FID"
 
        # check that we get the same pathname back
-       local FOUND=$($LFS fid2path $MOUNT $FID)
+       local FOUND=$($LFS fid2path $MOUNT "$FID")
        [ -z "$FOUND" ] && error "fid2path unable to get $FID path"
        [ "$FOUND" != "$DIR/$tfile" ] &&
                error "fid2path(path2fid($DIR/$tfile)) = $FOUND != $DIR/$tfile"
@@ -9785,7 +9813,8 @@ test_154c() {
                N=$((N + 1))
        done
 
-       $LFS fid2path $MOUNT $FID1 $FID2 $FID3 | while read PATHNAME; do
+       $LFS fid2path $MOUNT "$FID1" "$FID2" "$FID3" | while read PATHNAME;
+       do
                [ "$PATHNAME" = "$DIR/$tfile.$N" ] ||
                        error "fid2path pathname $PATHNAME != $DIR/$tfile.$N:"
                N=$((N + 1))
@@ -9809,13 +9838,13 @@ test_154d() {
        rm -f $DIR/$tfile
        touch $DIR/$tfile
 
-       fid=$($LFS path2fid $DIR/$tfile)
+       local fid=$($LFS path2fid $DIR/$tfile)
        # Open the file
        fd=$(free_fd)
        cmd="exec $fd<$DIR/$tfile"
        eval $cmd
-       fid_list=$(do_facet $SINGLEMDS $LCTL get_param $proc_ofile)
-       echo $fid_list | grep $fid
+       local fid_list=$(do_facet $SINGLEMDS $LCTL get_param $proc_ofile)
+       echo "$fid_list" | grep "$fid"
        rc=$?
 
        cmd="exec $fd>/dev/null"
@@ -10934,31 +10963,32 @@ test_181() { # bug 22177
 run_test 181 "Test open-unlinked dir ========================"
 
 test_182() {
-       [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-       # disable MDC RPC lock wouldn't crash client
        local fcount=1000
-       local tcount=4
+       local tcount=10
 
        mkdir -p $DIR/$tdir || error "creating dir $DIR/$tdir"
-#define OBD_FAIL_MDC_RPCS_SEM          0x804
-       $LCTL set_param fail_loc=0x804
 
-       for (( i=0; i < $tcount; i++ )) ; do
+       $LCTL set_param mdc.*.rpc_stats=clear
+
+       for (( i = 0; i < $tcount; i++ )) ; do
                mkdir $DIR/$tdir/$i
+       done
+
+       for (( i = 0; i < $tcount; i++ )) ; do
                createmany -o $DIR/$tdir/$i/f- $fcount &
        done
        wait
 
-       for (( i=0; i < $tcount; i++ )) ; do
+       for (( i = 0; i < $tcount; i++ )) ; do
                unlinkmany $DIR/$tdir/$i/f- $fcount &
        done
        wait
 
-       rm -rf $DIR/$tdir
+       $LCTL get_param mdc.*.rpc_stats
 
-       $LCTL set_param fail_loc=0
+       rm -rf $DIR/$tdir
 }
-run_test 182 "Disable MDC RPCs semaphore wouldn't crash client ================"
+run_test 182 "Test parallel modify metadata operations ================"
 
 test_183() { # LU-2275
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
@@ -11056,7 +11086,7 @@ test_184c() {
        local ref2=$dir0/ref2
        local file1=$dir0/file1
        local file2=$dir0/file2
-       # create a file large enough for the concurent test
+       # create a file large enough for the concurrent test
        dd if=/dev/urandom of=$ref1 bs=1M count=$((RANDOM % 50 + 20))
        dd if=/dev/urandom of=$ref2 bs=1M count=$((RANDOM % 50 + 20))
        echo "ref file size: ref1($(stat -c %s $ref1))," \
@@ -11907,7 +11937,7 @@ test_220() { #LU-325
        local OSTIDX=0
 
        test_mkdir -p $DIR/$tdir
-       local OST=$(lfs osts | grep ${OSTIDX}": " | \
+       local OST=$($LFS osts | grep ${OSTIDX}": " | \
                awk '{print $2}' | sed -e 's/_UUID$//')
 
        # on the mdt's osc
@@ -12038,6 +12068,39 @@ test_224b() { # LU-1039, MRP-303
 }
 run_test 224b "Don't panic on bulk IO failure"
 
+test_224c() { # LU-6441
+       [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+       local pages_per_rpc=$($LCTL get_param \
+                               osc.*.max_pages_per_rpc)
+       local at_max=$($LCTL get_param -n at_max)
+       local timeout=$($LCTL get_param -n timeout)
+       local test_at="$LCTL get_param -n at_max"
+       local param_at="$FSNAME.sys.at_max"
+       local test_timeout="$LCTL get_param -n timeout"
+       local param_timeout="$FSNAME.sys.timeout"
+
+       $LCTL set_param -n osc.*.max_pages_per_rpc=1024
+
+       set_conf_param_and_check client "$test_at" "$param_at" 0 ||
+               error "conf_param at_max=0 failed"
+       set_conf_param_and_check client "$test_timeout" "$param_timeout" 5 ||
+               error "conf_param timeout=5 failed"
+
+       #define OBD_FAIL_PTLRPC_CLIENT_BULK_CB3   0x520
+       $LCTL set_param fail_loc=0x520
+       dd if=/dev/zero of=$DIR/$tfile bs=8MB count=1
+       sync
+       $LCTL set_param fail_loc=0
+
+       set_conf_param_and_check client "$test_at" "$param_at" $at_max ||
+               error "conf_param at_max=$at_max failed"
+       set_conf_param_and_check client "$test_timeout" "$param_timeout" \
+               $timeout || error "conf_param timeout=$timeout failed"
+
+       $LCTL set_param -n $pages_per_rpc
+}
+run_test 224c "Don't hang if one of md lost during large bulk RPC"
+
 MDSSURVEY=${MDSSURVEY:-$(which mds-survey 2>/dev/null || true)}
 test_225a () {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
@@ -12320,8 +12383,8 @@ run_test 228c "NOT shrink the last entry in OI index node to recycle idle leaf"
 
 test_229() { # LU-2482, LU-3448
        [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.4.53) ] &&
-               skip "No HSM support on MDS of $(get_lustre_version)," \
-                        "need 2.4.53 at least" && return
+               skip "No HSM $(lustre_build_version $SINGLEMDS) MDS < 2.4.53" &&
+               return
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        [ $OSTCOUNT -lt 2 ] && skip "needs >= 2 OSTs" && return
 
@@ -12804,11 +12867,11 @@ test_238() {
        ln $DIR/$tfile $DIR/$tfile.lnk
        touch $DIR/$tfile.new
        mv $DIR/$tfile.new $DIR/$tfile
-       local fid1=$(lfs path2fid $DIR/$tfile)
-       local fid2=$(lfs path2fid $DIR/$tfile.lnk)
-       local path1=$(lfs fid2path $FSNAME $fid1)
+       local fid1=$($LFS path2fid $DIR/$tfile)
+       local fid2=$($LFS path2fid $DIR/$tfile.lnk)
+       local path1=$($LFS fid2path $FSNAME "$fid1")
        [ $tfile == $path1 ] || error "linkea inconsistent: $tfile $fid1 $path1"
-       local path2=$(lfs fid2path $FSNAME $fid2)
+       local path2=$($LFS fid2path $FSNAME "$fid2")
        [ $tfile.lnk == $path2 ] ||
                error "linkea inconsistent: $tfile.lnk $fid2 $path2!"
        rm -f $DIR/$tfile*
@@ -12875,6 +12938,16 @@ test_241() {
 }
 run_test 241 "bio vs dio"
 
+test_241b() {
+       dd if=/dev/zero of=$DIR/$tfile count=1 bs=40960
+       ls -la $DIR/$tfile
+       test_241_dio 1000 &
+       PID=$!
+       test_241_dio 1000
+       wait $PID
+}
+run_test 241b "dio vs dio"
+
 test_242() {
        mkdir -p $DIR/$tdir
        touch $DIR/$tdir/$tfile
@@ -12895,6 +12968,16 @@ test_243()
 }
 run_test 243 "various group lock tests"
 
+test_244()
+{
+       test_mkdir -p $DIR/$tdir
+       dd if=/dev/zero of=$DIR/$tdir/$tfile bs=1M count=35
+       sendfile_grouplock $DIR/$tdir/$tfile || \
+               error "sendfile+grouplock failed"
+       rm -rf $DIR/$tdir
+}
+run_test 244 "sendfile with group lock tests"
+
 test_250() {
        [ "$(facet_fstype ost$(($($GETSTRIPE -i $DIR/$tfile) + 1)))" = "zfs" ] \
         && skip "no 16TB file size limit on ZFS" && return
@@ -12909,6 +12992,23 @@ test_250() {
 }
 run_test 250 "Write above 16T limit"
 
+test_251() {
+       $SETSTRIPE -c -1 -S 1048576 $DIR/$tfile
+
+       #define OBD_FAIL_LLITE_LOST_LAYOUT 0x1407
+       #Skip once - writing the first stripe will succeed
+       $LCTL set_param fail_loc=0xa0001407 fail_val=1
+       $MULTIOP $DIR/$tfile o:O_RDWR:w2097152c 2>&1 | grep -q "short write" &&
+               error "short write happened"
+
+       $LCTL set_param fail_loc=0xa0001407 fail_val=1
+       $MULTIOP $DIR/$tfile or2097152c 2>&1 | grep -q "short read" &&
+               error "short read happened"
+
+       rm -f $DIR/$tfile
+}
+run_test 251 "Handling short read and write correctly"
+
 cleanup_test_300() {
        trap 0
        umask $SAVE_UMASK
@@ -12930,6 +13030,8 @@ test_striped_dir() {
        local mode=$(stat -c%a $DIR/$tdir/striped_dir)
        [ "$mode" = "755" ] || error "expect 755 got $mode"
 
+       $LFS getdirstripe $DIR/$tdir/striped_dir > /dev/null 2>&1 ||
+               error "getdirstripe failed"
        stripe_count=$($LFS getdirstripe -c $DIR/$tdir/striped_dir)
        if [ "$stripe_count" != "2" ]; then
                error "stripe_count is $stripe_count, expect 2"
@@ -12962,6 +13064,11 @@ test_striped_dir() {
        [ $(stat -c%h $DIR/$tdir/striped_dir) == '2' ] ||
                error "nlink error after rmdir"
 
+       chattr +i $DIR/$tdir/striped_dir
+       createmany -o $DIR/$tdir/striped_dir/f 10 &&
+               error "immutable flags not working under striped dir!"
+       chattr -i $DIR/$tdir/striped_dir
+
        rmdir $DIR/$tdir/striped_dir ||
                error "rmdir striped dir error"
 
@@ -13091,19 +13198,16 @@ test_300e() {
        $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/dir_a $DIR/$tdir/striped_dir/dir_b ||
+               error "rename dir under striped dir fails"
 
-       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/stp_a $DIR/$tdir/striped_dir/stp_b ||
+               error "rename dir under different stripes fails"
 
        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 ||
+       mrename $DIR/$tdir/striped_dir/dir_b $DIR/$tdir/striped_dir/dir_c ||
                error "rename dir under striped dir should succeed"
 
        rm -rf $DIR/$tdir
@@ -13135,21 +13239,15 @@ test_300f() {
        $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 &&
+       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 &&
+       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"
@@ -13178,6 +13276,9 @@ test_300_check_default_striped_dir()
 
        mkdir $DIR/$tdir/$dirname/{test1,test2,test3,test4} ||
                                                error "create dirs failed"
+
+       createmany -o $DIR/$tdir/$dirname/f- 10 || error "create files failed"
+       unlinkmany $DIR/$tdir/$dirname/f- 10    || error "unlink files failed"
        for dir in $(find $DIR/$tdir/$dirname/*); do
                stripe_count=$($LFS getdirstripe -c $dir)
                [ $stripe_count -eq $default_count ] ||
@@ -13298,6 +13399,80 @@ test_300i() {
 }
 run_test 300i "client handle unknown hash type striped directory"
 
+prepare_remote_file() {
+       mkdir $DIR/$tdir/src_dir ||
+               error "create remote source failed"
+
+       cp /etc/hosts $DIR/$tdir/src_dir/a || error
+       touch $DIR/$tdir/src_dir/a
+
+       $LFS mkdir -i 1 $DIR/$tdir/tgt_dir ||
+               error "create remote target dir failed"
+
+       touch $DIR/$tdir/tgt_dir/b
+
+       mrename $DIR/$tdir/src_dir/a $DIR/$tdir/tgt_dir/b ||
+               error "rename dir cross MDT failed!"
+
+       $CHECKSTAT -t file $DIR/$tdir/src_dir/a &&
+               error "src_child still exists after rename"
+
+       $CHECKSTAT -t file $DIR/$tdir/tgt_dir/b ||
+               error "missing file(a) after rename"
+
+       diff /etc/hosts $DIR/$tdir/tgt_dir/b ||
+               error "diff after rename"
+}
+
+test_310a() {
+       [[ $MDSCOUNT -lt 2 ]] && skip "needs >= 4 MDTs" && return
+       [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+       local remote_file=$DIR/$tdir/tgt_dir/b
+
+       mkdir -p $DIR/$tdir
+
+       prepare_remote_file || error "prepare remote file failed"
+
+       #open-unlink file
+       $OPENUNLINK $remote_file $remote_file || error
+       $CHECKSTAT -a $remote_file || error
+}
+run_test 310a "open unlink remote file"
+
+test_310b() {
+       [[ $MDSCOUNT -lt 2 ]] && skip "needs >= 4 MDTs" && return
+       [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+       local remote_file=$DIR/$tdir/tgt_dir/b
+
+       mkdir -p $DIR/$tdir
+
+       prepare_remote_file || error "prepare remote file failed"
+
+       ln $remote_file $DIR/$tfile || error "link failed for remote file"
+       $MULTIOP $DIR/$tfile Ouc || error "mulitop failed"
+       $CHECKSTAT -t file $remote_file || error "check file failed"
+}
+run_test 310b "unlink remote file with multiple links while open"
+
+test_310c() {
+       [[ $MDSCOUNT -lt 4 ]] && skip "needs >= 4 MDTs" && return
+       [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+       local remote_file=$DIR/$tdir/tgt_dir/b
+
+       mkdir -p $DIR/$tdir
+
+       prepare_remote_file || error "prepare remote file failed"
+
+       ln $remote_file $DIR/$tfile || error "link failed for remote file"
+       multiop_bg_pause $remote_file O_uc ||
+                       error "mulitop failed for remote file"
+       MULTIPID=$!
+       $MULTIOP $DIR/$tfile Ouc
+       kill -USR1 $MULTIPID
+       wait $MULTIPID
+}
+run_test 310c "open-unlink remote file with multiple links"
+
 test_400a() { # LU-1606, was conf-sanity test_74
        local extra_flags=''
        local out=$TMP/$tfile