Whamcloud - gitweb
LU-819 utils: Fix lfs getstripe -M
[fs/lustre-release.git] / lustre / tests / sanity.sh
index e0acee1..02f0d6f 100644 (file)
@@ -466,6 +466,7 @@ test_17g() {
 run_test 17g "symlinks: really long symlink name ==============================="
 
 test_17h() { #bug 17378
+        remote_mds_nodsh && skip "remote MDS with nodsh" && return
         mkdir -p $DIR/$tdir
         $SETSTRIPE $DIR/$tdir -c -1
 #define OBD_FAIL_MDS_LOV_PREP_CREATE 0x141
@@ -475,6 +476,7 @@ test_17h() { #bug 17378
 run_test 17h "create objects: lov_free_memmd() doesn't lbug"
 
 test_17i() { #bug 20018
+        remote_mds_nodsh && skip "remote MDS with nodsh" && return
         mkdir -p $DIR/$tdir
        local foo=$DIR/$tdir/$tfile
        ln -s $foo $foo || error "create symlink failed"
@@ -1043,8 +1045,7 @@ exhaust_precreations() {
        local MDSIDX=$(get_mds_dir "$DIR/$tdir")
        echo OSTIDX=$OSTIDX MDSIDX=$MDSIDX
 
-       local OST=$(lfs osts | grep ${OSTIDX}": " | \
-               awk '{print $2}' | sed -e 's/_UUID$//')
+       local OST=$(ostname_from_index $OSTIDX)
        local MDT_INDEX=$(lfs df | grep "\[MDT:$((MDSIDX - 1))\]" | awk '{print $1}' | \
                          sed -e 's/_UUID$//;s/^.*-//')
 
@@ -1138,6 +1139,7 @@ test_27q() {
        reset_enospc
        rm -f $DIR/$tdir/$tfile
 
+       mkdir -p $DIR/$tdir
        $MCREATE $DIR/$tdir/$tfile || error "mcreate $DIR/$tdir/$tfile failed"
        $TRUNCATE $DIR/$tdir/$tfile 80000000 ||error "truncate $DIR/$tdir/$tfile failed"
        $CHECKSTAT -s 80000000 $DIR/$tdir/$tfile || error "checkstat failed"
@@ -1220,7 +1222,7 @@ test_27v() { # bug 4900
         touch $DIR/$tdir/$tfile
         #define OBD_FAIL_TGT_DELAY_PRECREATE     0x705
         # all except ost1
-        for (( i=0; i < OSTCOUNT; i++ )) ; do
+        for (( i=1; i < OSTCOUNT; i++ )); do
                 do_facet ost$i lctl set_param fail_loc=0x705
         done
         local START=`date +%s`
@@ -1257,10 +1259,11 @@ test_27w() { # bug 10997
 run_test 27w "check lfs setstripe -c -s -i options ============="
 
 test_27x() {
+       remote_ost_nodsh && skip "remote OST with nodsh" && return
        [ "$OSTCOUNT" -lt "2" ] && skip_env "$OSTCOUNT < 2 OSTs" && return
        OFFSET=$(($OSTCOUNT - 1))
        OSTIDX=0
-       local OST=$(lfs osts | awk '/'${OSTIDX}': / { print $2 }' | sed -e 's/_UUID$//')
+       local OST=$(ostname_from_index $OSTIDX)
 
        mkdir -p $DIR/$tdir
        $SETSTRIPE $DIR/$tdir -c 1      # 1 stripe per file
@@ -1278,6 +1281,7 @@ run_test 27x "create files while OST0 is degraded"
 test_27y() {
         [ "$OSTCOUNT" -lt "2" ] && skip_env "$OSTCOUNT < 2 OSTs -- skipping" && return
         remote_mds_nodsh && skip "remote MDS with nodsh" && return
+        remote_ost_nodsh && skip "remote OST with nodsh" && return
 
         local mdtosc=$(get_mdtosc_proc_path $SINGLEMDS $FSNAME-OST0000)
         local last_id=$(do_facet $SINGLEMDS lctl get_param -n \
@@ -1300,14 +1304,14 @@ test_27y() {
                 } fi
         done
 
-        OSTIDX=$(lfs osts | grep ${OST} | awk '{print $1}' | sed -e 's/://')
+        OSTIDX=$(index_from_ostuuid $OST)
         mkdir -p $DIR/$tdir
         $SETSTRIPE $DIR/$tdir -c 1      # 1 stripe / file
 
-        do_facet ost$OSTIDX lctl set_param -n obdfilter.$OST.degraded 1
+        do_facet ost$((OSTIDX+1)) lctl set_param -n obdfilter.$OST.degraded 1
         sleep_maxage
         createmany -o $DIR/$tdir/$tfile $fcount
-        do_facet ost$OSTIDX lctl set_param -n obdfilter.$OST.degraded 0
+        do_facet ost$((OSTIDX+1)) lctl set_param -n obdfilter.$OST.degraded 0
 
         for i in `seq 0 $OFFSET`; do
                 [ `$GETSTRIPE $DIR/$tdir/$tfile$i | grep -A 10 obdidx | awk '{print $1}'| grep -w "$OSTIDX"` ] || \
@@ -1343,14 +1347,13 @@ check_seq_oid()
         [ "$FSTYPE" != "ldiskfs" ] && skip "can not check trusted.fid FSTYPE=$FSTYPE" && return 0
 
         # check the trusted.fid attribute of the OST objects of the file
-        for (( i=0, j=19; i < ${lmm[8]}; i++, j+=4 )); do
+        for (( i=0, j=21; i < ${lmm[8]}; i++, j+=4 )); do
                 local obdidx=${lmm[$j]}
                 local devnum=$((obdidx + 1))
                 local objid=${lmm[$((j+1))]}
                 local group=${lmm[$((j+3))]}
                 local dev=$(ostdevname $devnum)
-                local dir=${MOUNT%/*}/ost$devnum
-                local mntpt=$(facet_mntpt ost$devnum)
+                local dir=$(facet_mntpt ost$devnum)
 
                 stop ost$devnum
                 do_facet ost$devnum mount -t $FSTYPE $dev $dir $OST_MOUNT_OPTS ||
@@ -1370,19 +1373,20 @@ check_seq_oid()
                 [ $stripe -eq $i ] || { error "stripe mismatch"; return 6; }
 
                 echo -e "\t\tost $obdidx, objid $objid, group $group"
-                do_facet ost$devnum umount -d $mntpt
+                do_facet ost$devnum umount -d $dir
                 start ost$devnum $dev $OST_MOUNT_OPTS
         done
 }
 
 test_27z() {
+        remote_ost_nodsh && skip "remote OST with nodsh" && return
         mkdir -p $DIR/$tdir
         $SETSTRIPE $DIR/$tdir/$tfile-1 -c 1 -o 0 -s 1m ||
-                { error "setstripe -c -1 failed"; return 1; }
+                { error "setstripe -c 1 failed"; return 1; }
         dd if=/dev/zero of=$DIR/$tdir/$tfile-1 bs=1M count=1 ||
                 { error "dd 1 mb failed"; return 2; }
         $SETSTRIPE $DIR/$tdir/$tfile-2 -c -1 -o $(($OSTCOUNT - 1)) -s 1m ||
-                { error "setstripe -c 1 failed"; return 3; }
+                { error "setstripe -c -1 failed"; return 3; }
         dd if=/dev/zero of=$DIR/$tdir/$tfile-2 bs=1M count=$OSTCOUNT ||
                 { error "dd $OSTCOUNT mb failed"; return 4; }
         sync
@@ -1877,6 +1881,7 @@ test_33c() {
         local write_bytes
         local all_zeros
 
+        remote_ost_nodsh && skip "remote OST with nodsh" && return
         all_zeros=:
         rm -fr $DIR/d33
         mkdir -p $DIR/d33
@@ -2412,6 +2417,7 @@ run_test 39k "write, utime, close, stat ========================"
 TEST_39_ATIME=`date -d "1 year" +%s`
 
 test_39l() {
+       remote_mds_nodsh && skip "remote MDS with nodsh" && return
        local atime_diff=$(do_facet $SINGLEMDS lctl get_param -n mdd.*.atime_diff)
 
        mkdir -p $DIR/$tdir
@@ -2976,17 +2982,13 @@ test_51a() {    # was test_51
 }
 run_test 51a "special situations: split htree with empty entry =="
 
-#export NUMTEST=70000
-# FIXME: I select a relatively small number to do basic test.
-# large number may give panic(). debugging on this is going on.
-export NUMTEST=70
+export NUMTEST=70000
 test_51b() {
        NUMFREE=`df -i -P $DIR | tail -n 1 | awk '{ print $4 }'`
        [ $NUMFREE -lt 21000 ] && \
                skip "not enough free inodes ($NUMFREE)" && \
                return
 
-       check_kernel_version 40 || NUMTEST=31000
        [ $NUMFREE -lt $NUMTEST ] && NUMTEST=$(($NUMFREE - 50))
 
        mkdir -p $DIR/d51b
@@ -2994,6 +2996,32 @@ test_51b() {
 }
 run_test 51b "mkdir .../t-0 --- .../t-$NUMTEST ===================="
 
+test_51ba() { # LU-993
+        local BASE=$DIR/d51b
+        # unlink all but 100 subdirectories, then check it still works
+        local LEFT=100
+        local DELETE=$((NUMTEST - LEFT))
+
+        ! [ -d "${BASE}/t-$DELETE" ] && skip "test_51b() not run" && return 0
+
+        # for ldiskfs the nlink count should be 1, but this is OSD specific
+        # and so this is listed for informational purposes only
+        log "nlink before: $(stat -c %h $BASE)"
+        unlinkmany -d $BASE/t- $DELETE ||
+                error "unlink of first $DELETE subdirs failed"
+
+        log "nlink between: $(stat -c %h $BASE)"
+        local FOUND=$(ls -l ${BASE} | wc -l)
+        FOUND=$((FOUND - 1))  # trim the first line of ls output
+        [ $FOUND -ne $LEFT ] &&
+                error "can't find subdirs: found only $FOUND/$LEFT"
+
+        unlinkmany -d $BASE/t- $DELETE $LEFT ||
+                error "unlink of second $LEFT subdirs failed"
+        log "nlink after: $(stat -c %h $BASE)"
+}
+run_test 51ba "rmdir .../t-0 --- .../t-$NUMTEST"
+
 test_51bb() {
        [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
 
@@ -3259,7 +3287,7 @@ test_56a() {      # was test_56
         [  "$OSTCOUNT" -lt 2 ] && \
                 skip_env "skipping other lfs getstripe --obd test" && return
         OSTIDX=1
-        OBDUUID=$(lfs osts | grep ${OSTIDX}": " | awk '{print $2}')
+        OBDUUID=$(ostuuid_from_index $OSTIDX)
         FILENUM=`$GETSTRIPE -ir $DIR/d56 | grep -x $OSTIDX | wc -l`
         FOUND=`$GETSTRIPE -r --obd $OBDUUID $DIR/d56 | grep obdidx | wc -l`
         [ $FOUND -eq $FILENUM ] || \
@@ -3347,9 +3375,9 @@ test_56i() {
        mkdir -p $DIR/$tdir
        UUID=$(ostuuid_from_index 0 $DIR/$tdir)
        OUT=$($LFIND -obd $UUID $DIR/$tdir)
-       [ "$OUT" ] && error "$LFIND returned directory '$OUT'" || true
+       [ "$OUT" ] && error "$LFIND -obd returned directory '$OUT'" || true
 }
-run_test 56i "check 'lfs find -ost UUID' skips directories ======="
+run_test 56i "check 'lfs find -obd UUID' skips directories ======="
 
 test_56j() {
        setup_56_special $NUMFILES $NUMDIRS
@@ -3402,19 +3430,27 @@ test_56n() {
 run_test 56n "check lfs find -type l ============================="
 
 test_56o() {
-       setup_56 $NUMFILES $NUMDIRS
        TDIR=$DIR/${tdir}g
+       rm -rf $TDIR
+       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)"
        utime $TDIR/dir2 > /dev/null || error "utime (4)"
        utime $TDIR/dir1/file1 > /dev/null || error "utime (5)"
+       dd if=/dev/zero count=1 >> $TDIR/dir1/file1 && sync
+
+       EXPECTED=4
+       NUMS=`$LFIND -mtime +0 $TDIR | wc -l`
+       [ $NUMS -eq $EXPECTED ] || \
+               error "lfs find -mtime +0 $TDIR wrong: found $NUMS, expected $EXPECTED"
 
-       EXPECTED=5
-       NUMS=`$LFIND -mtime +1 $TDIR | wc -l`
+       EXPECTED=12
+       NUMS=`$LFIND -mtime 0 $TDIR | wc -l`
        [ $NUMS -eq $EXPECTED ] || \
-               error "lfs find -mtime $TDIR wrong: found $NUMS, expected $EXPECTED"
+               error "lfs find -mtime 0 $TDIR wrong: found $NUMS, expected $EXPECTED"
+
 }
 run_test 56o "check lfs find -mtime for old files =========================="
 
@@ -3477,6 +3513,7 @@ test_56r() {
        [ $NUMS -eq $EXPECTED ] || \
                error "lfs find $TDIR ! -size 0 wrong: found $NUMS, expected $EXPECTED"
        echo "test" > $TDIR/56r && sync
+       echo "test2" > $TDIR/56r2 && sync
        EXPECTED=1
        NUMS=`$LFIND -size 5 -t f $TDIR | wc -l`
        [ $NUMS -eq $EXPECTED ] || \
@@ -3485,18 +3522,38 @@ test_56r() {
        NUMS=`$LFIND -size +5 -t f $TDIR | wc -l`
        [ $NUMS -eq $EXPECTED ] || \
                error "lfs find $TDIR -size +5 wrong: found $NUMS, expected $EXPECTED"
-       EXPECTED=13
+       EXPECTED=2
        NUMS=`$LFIND -size +0 -t f $TDIR | wc -l`
        [ $NUMS -eq $EXPECTED ] || \
                error "lfs find $TDIR -size +0 wrong: found $NUMS, expected $EXPECTED"
-       EXPECTED=0
+       EXPECTED=2
        NUMS=`$LFIND ! -size -5 -t f $TDIR | wc -l`
        [ $NUMS -eq $EXPECTED ] || \
                error "lfs find $TDIR ! -size -5 wrong: found $NUMS, expected $EXPECTED"
+       EXPECTED=12
+       NUMS=`$LFIND -size -5 -t f $TDIR | wc -l`
+       [ $NUMS -eq $EXPECTED ] || \
+               error "lfs find $TDIR -size -5 wrong: found $NUMS, expected $EXPECTED"
 }
 
 run_test 56r "check lfs find -size works =========================="
 
+test_56v() {
+    local FIND_MDT_IDX=0
+
+    TDIR=${tdir}g
+    rm -rf $TDIR
+    setup_56 $NUMFILES $NUMDIRS
+
+    UUID=$(mdtuuid_from_index $FIND_MDT_IDX $DIR/$TDIR)
+    for file in $($LFIND -mdt $UUID $DIR/$TDIR); do
+        file_mdt_idx=$($GETSTRIPE -M $file)
+        [ $file_mdt_idx -eq $FIND_MDT_IDX ] ||
+            error "wrong lfind -m not match getstripe -M"
+    done
+}
+run_test 56v "check 'lfs find -mdt match with lfs getstripe -M' ======="
+
 test_57a() {
        # note test will not do anything if MDS is not local
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
@@ -3513,6 +3570,7 @@ test_57a() {
 run_test 57a "verify MDS filesystem created with large inodes =="
 
 test_57b() {
+       remote_mds_nodsh && skip "remote MDS with nodsh" && return
        local dir=$DIR/d57b
 
        local FILECOUNT=100
@@ -3584,6 +3642,7 @@ run_test 59 "verify cancellation of llog records async ========="
 
 TEST60_HEAD="test_60 run $RANDOM"
 test_60a() {
+       remote_mgs_nodsh && skip "remote MGS with nodsh" && return
         [ ! -f run-llog.sh ] && skip_env "missing subtest run-llog.sh" && return
        log "$TEST60_HEAD - from kernel mode"
        do_facet mgs sh run-llog.sh
@@ -3739,9 +3798,9 @@ test_65d() {
        mkdir -p $DIR/d65
        if [ $STRIPECOUNT -le 0 ]; then
                sc=1
-       elif [ $STRIPECOUNT -gt 160 ]; then
-#LOV_MAX_STRIPE_COUNT is 160
-               [ $OSTCOUNT -gt 160 ] && sc=160 || sc=$(($OSTCOUNT - 1))
+       elif [ $STRIPECOUNT -gt 2000 ]; then
+#LOV_MAX_STRIPE_COUNT is 2000
+               [ $OSTCOUNT -gt 2000 ] && sc=2000 || sc=$(($OSTCOUNT - 1))
        else
                sc=$(($STRIPECOUNT - 1))
        fi
@@ -4171,13 +4230,12 @@ set_checksums()
        return 0
 }
 
-export ORIG_CSUM_TYPE=""
+export ORIG_CSUM_TYPE="`lctl get_param -n osc.*osc-[^mM]*.checksum_type |
+                        sed 's/.*\[\(.*\)\].*/\1/g' | head -n1`"
 CKSUM_TYPES=${CKSUM_TYPES:-"crc32 adler"}
+[ "$ORIG_CSUM_TYPE" = "crc32c" ] && CKSUM_TYPES="$CKSUM_TYPES crc32c"
 set_checksum_type()
 {
-       [ "$ORIG_CSUM_TYPE" ] || \
-               ORIG_CSUM_TYPE=`lctl get_param -n osc/*osc-[^mM]*/checksum_type |
-                                sed 's/.*\[\(.*\)\].*/\1/g' | head -n1`
        lctl set_param -n osc.*osc-[^mM]*.checksum_type $1
        log "set checksum type to $1"
        return 0
@@ -4428,6 +4486,7 @@ test_80() { # bug 10718
 run_test 80 "Page eviction is equally fast at high offsets too  ===="
 
 test_81a() { # LU-456
+        remote_ost_nodsh && skip "remote OST with nodsh" && return
         # define OBD_FAIL_OST_MAPBLK_ENOSPC    0x228
         # MUST OR with the OBD_FAIL_ONCE (0x80000000)
         do_facet ost0 lctl set_param fail_loc=0x80000228
@@ -4443,6 +4502,7 @@ test_81a() { # LU-456
 run_test 81a "OST should retry write when get -ENOSPC ==============="
 
 test_81b() { # LU-456
+        remote_ost_nodsh && skip "remote OST with nodsh" && return
         # define OBD_FAIL_OST_MAPBLK_ENOSPC    0x228
         # Don't OR with the OBD_FAIL_ONCE (0x80000000)
         do_facet ost0 lctl set_param fail_loc=0x228
@@ -4807,7 +4867,10 @@ test_102b() {
        echo "get/set/list trusted.lov xattr ..."
        [ "$OSTCOUNT" -lt "2" ] && skip_env "skipping 2-stripe test" && return
        local testfile=$DIR/$tfile
-       $SETSTRIPE -s 65536 -i 1 -c 2 $testfile || error "setstripe failed"
+       $SETSTRIPE -s 65536 -i 1 -c $OSTCOUNT $testfile ||
+               error "setstripe failed"
+       local STRIPECOUNT=$(lfs getstripe -c $testfile) ||
+               error "getstripe failed"
        getfattr -d -m "^trusted" $testfile 2> /dev/null | \
        grep "trusted.lov" || error "can't get trusted.lov from $testfile"
 
@@ -4822,7 +4885,8 @@ test_102b() {
        local stripe_size=`grep "size"  $tmp_file| awk '{print $2}'`
        local stripe_count=`grep "count"  $tmp_file| awk '{print $2}'`
        [ "$stripe_size" -eq 65536 ] || error "stripe size $stripe_size != 65536"
-       [ "$stripe_count" -eq 2 ] || error "stripe count $stripe_count != 2"
+       [ "$stripe_count" -eq $STRIPECOUNT ] ||
+               error "stripe count $stripe_count != $STRIPECOUNT"
        rm -f $DIR/$tfile
 }
 run_test 102b "getfattr/setfattr for trusted.lov EAs ============"
@@ -4834,7 +4898,10 @@ test_102c() {
        mkdir -p $DIR/$tdir
        chown $RUNAS_ID $DIR/$tdir
        local testfile=$DIR/$tdir/$tfile
-       $RUNAS $SETSTRIPE -s 65536 -i 1 -c 2 $testfile||error "setstripe failed"
+       $RUNAS $SETSTRIPE -s 65536 -i 1 -c $OSTCOUNT $testfile ||
+               error "setstripe failed"
+       local STRIPECOUNT=$($RUNAS lfs getstripe -c $testfile) ||
+               error "getstripe failed"
        $RUNAS getfattr -d -m "^lustre" $testfile 2> /dev/null | \
        grep "lustre.lov" || error "can't get lustre.lov from $testfile"
 
@@ -4849,7 +4916,8 @@ test_102c() {
        local stripe_size=`grep "size"  $tmp_file| awk '{print $2}'`
        local stripe_count=`grep "count"  $tmp_file| awk '{print $2}'`
        [ $stripe_size -eq 65536 ] || error "stripe size $stripe_size != 65536"
-       [ $stripe_count -eq 2 ] || error "stripe count $stripe_count != 2"
+       [ $stripe_count -eq $STRIPECOUNT ] ||
+               error "stripe count $stripe_count != $STRIPECOUNT"
 }
 run_test 102c "non-root getfattr/setfattr for lustre.lov EAs ==========="
 
@@ -4936,51 +5004,58 @@ test_102f() {
 }
 run_test 102f "tar copy files, not keep osts ==========="
 
-test_102h() { # bug 15777
+grow_xattr() {
+       local xsize=${1:-1024}  # in bytes
+       local file=$DIR/$tfile
+
        [ -z $(lctl get_param -n mdc.*.connect_flags | grep xattr) ] &&
-               skip "must have user_xattr" && return
+               skip "must have user_xattr" && return 0
        [ -z "$(which setfattr 2>/dev/null)" ] &&
-               skip_env "could not find setfattr" && return
+               skip_env "could not find setfattr" && return 0
+       [ -z "$(which getfattr 2>/dev/null)" ] &&
+               skip_env "could not find getfattr" && return 0
 
-       XBIG=trusted.big
-       XSIZE=1024
-       touch $DIR/$tfile
-       VALUE=datadatadatadatadatadatadatadata
-       while [ $(echo $VALUE | wc -c) -lt $XSIZE ]; do
-               VALUE="$VALUE$VALUE"
-       done
-       log "save $XBIG on $DIR/$tfile"
-        setfattr -n $XBIG -v "$VALUE" $DIR/$tfile ||
-               error "saving $XBIG on $DIR/$tfile failed"
-        ORIG=$(getfattr -n $XBIG $DIR/$tfile 2> /dev/null | grep $XBIG)
-       OSIZE=$(echo $ORIG | wc -c)
-       [ $OSIZE -lt $XSIZE ] && error "set $XBIG too small ($OSIZE < $XSIZE)"
-
-       XSML=trusted.sml
-       log "save $XSML on $DIR/$tfile"
-        setfattr -n $XSML -v val $DIR/$tfile ||
-               error "saving $XSML on $DIR/$tfile failed"
-        NEW=$(getfattr -n $XBIG $DIR/$tfile 2> /dev/null | grep $XBIG)
-       if [ "$NEW" != "$ORIG" ]; then
-               log "orig: $ORIG"
-               log "new: $NEW"
-               error "$XBIG different after saving $XSML"
-       fi
+       touch $file
+
+       local value="$(generate_string $xsize)"
+
+       local xbig=trusted.big
+       log "save $xbig on $file"
+       setfattr -n $xbig -v $value $file ||
+               error "saving $xbig on $file failed"
+
+       local orig=$(get_xattr_value $xbig $file)
+       [[ "$orig" != "$value" ]] && error "$xbig different after saving $xbig"
+
+       local xsml=trusted.sml
+       log "save $xsml on $file"
+       setfattr -n $xsml -v val $file || error "saving $xsml on $file failed"
+
+       local new=$(get_xattr_value $xbig $file)
+       [[ "$new" != "$orig" ]] && error "$xbig different after saving $xsml"
+
+       log "grow $xsml on $file"
+       setfattr -n $xsml -v "$value" $file ||
+               error "growing $xsml on $file failed"
+
+       new=$(get_xattr_value $xbig $file)
+       [[ "$new" != "$orig" ]] && error "$xbig different after growing $xsml"
+       log "$xbig still valid after growing $xsml"
 
-       log "grow $XSML on $DIR/$tfile"
-        setfattr -n $XSML -v "$VALUE" $DIR/$tfile ||
-               error "growing $XSML on $DIR/$tfile failed"
-        NEW=$(getfattr -n $XBIG $DIR/$tfile 2> /dev/null | grep $XBIG)
-       if [ "$NEW" != "$ORIG" ]; then
-               log "orig: $ORIG"
-               log "new: $NEW"
-               error "$XBIG different after growing $XSML"
-       fi
-       log "$XBIG still valid after growing $XSML"
        rm -f $file
 }
+
+test_102h() { # bug 15777
+       grow_xattr 1024
+}
 run_test 102h "grow xattr from inside inode to external block"
 
+test_102ha() {
+       large_xattr_enabled || { skip "large_xattr disabled" && return; }
+       grow_xattr $(max_xattr_size)
+}
+run_test 102ha "grow xattr from inside inode to external inode"
+
 test_102i() { # bug 17038
         touch $DIR/$tfile
         ln -s $DIR/$tfile $DIR/${tfile}link
@@ -5087,10 +5162,13 @@ test_104a() {
        lfs df $DIR/$tfile || error "lfs df $DIR/$tfile failed"
        lfs df -ih $DIR/$tfile || error "lfs df -ih $DIR/$tfile failed"
 
-       OSC=`lctl get_param -n devices | awk '/-osc-/ {print $4}' | head -n 1`
+        OSC=`lctl dl |grep OST0000-osc-[^M] |awk '{print $4}'`
        lctl --device %$OSC deactivate
        lfs df || error "lfs df with deactivated OSC failed"
-       lctl --device %$OSC recover
+       lctl --device %$OSC activate
+        # wait the osc back to normal
+        wait_osc_import_state client ost FULL
+
        lfs df || error "lfs df with reactivated OSC failed"
        rm -f $DIR/$tfile
 }
@@ -5714,6 +5792,15 @@ test_118k()
 }
 run_test 118k "bio alloc -ENOMEM and IO TERM handling ========="
 
+test_118l()
+{
+       # LU-646
+       mkdir -p $DIR/$tdir
+       multiop $DIR/$tdir Dy || error "fsync dir failed"
+       rm -rf $DIR/$tdir
+}
+run_test 118l "fsync dir ========="
+
 [ "$SLOW" = "no" ] && [ -n "$OLD_RESENDCOUNT" ] && set_resend_count $OLD_RESENDCOUNT
 
 test_119a() # bug 11737
@@ -6142,7 +6229,7 @@ test_124a() {
         done
         echo ""
         lctl set_param -n $NSDIR.pool.lock_volume_factor $OLD_LVF
-        local LRU_SIZE_A=`lctl get_param -n $NSDIR/lru_size`
+        local LRU_SIZE_A=`lctl get_param -n $NSDIR.lru_size`
 
         [ $LRU_SIZE_B -gt $LRU_SIZE_A ] || {
                 error "No locks dropped in ${SLEEP}s. LRU size: $LRU_SIZE_A"
@@ -6728,6 +6815,7 @@ som_mode_switch() {
 }
 
 test_132() { #1028, SOM
+        remote_mds_nodsh && skip "remote MDS with nodsh" && return
         local num=$(get_mds_dir $DIR)
         local mymds=mds${num}
         local MOUNTOPT_SAVE=$MOUNTOPT
@@ -6772,7 +6860,7 @@ check_stats() {
        case $1 in
        $SINGLEMDS) res=`do_facet $SINGLEMDS $LCTL get_param mdt.$FSNAME-MDT0000.md_stats | grep "$2"`
                 ;;
-       ost) res=`do_facet ost $LCTL get_param obdfilter.$FSNAME-OST0000.stats | grep "$2"`
+       ost) res=`do_facet ost1 $LCTL get_param obdfilter.$FSNAME-OST0000.stats | grep "$2"`
                 ;;
        *) error "Wrong argument $1" ;;
        esac
@@ -6786,12 +6874,14 @@ check_stats() {
 }
 
 test_133a() {
+       remote_ost_nodsh && skip "remote OST with nodsh" && return
+       remote_mds_nodsh && skip "remote MDS with nodsh" && return
        local testdir=$DIR/${tdir}/stats_testdir
        mkdir -p $DIR/${tdir}
 
        # clear stats.
        do_facet $SINGLEMDS $LCTL set_param mdt.*.md_stats=clear
-       do_facet ost $LCTL set_param obdfilter.*.stats=clear
+       do_facet ost1 $LCTL set_param obdfilter.*.stats=clear
 
        # verify mdt stats first.
        mkdir ${testdir} || error "mkdir failed"
@@ -6810,11 +6900,23 @@ test_133a() {
        rmdir ${testdir} || error "rmdir failed"
        check_stats $SINGLEMDS "rmdir" 1
 
+       local testdir1=$DIR/${tdir}/stats_testdir1
+       mkdir -p ${testdir}
+       mkdir -p ${testdir1}
+       touch ${testdir1}/test1
+       mv ${testdir1}/test1 ${testdir} || error "file crossdir rename"
+       check_stats $SINGLEMDS "crossdir_rename" 1
+
+       mv ${testdir}/test1 ${testdir}/test0 || error "file samedir rename"
+       check_stats $SINGLEMDS "samedir_rename" 1
+
        rm -rf $DIR/${tdir}
 }
 run_test 133a "Verifying MDT stats ========================================"
 
 test_133b() {
+       remote_ost_nodsh && skip "remote OST with nodsh" && return
+       remote_mds_nodsh && skip "remote MDS with nodsh" && return
        local testdir=$DIR/${tdir}/stats_testdir
        mkdir -p ${testdir} || error "mkdir failed"
        touch ${testdir}/${tfile} || "touch failed"
@@ -6822,7 +6924,7 @@ test_133b() {
 
        # clear stats.
        do_facet $SINGLEMDS $LCTL set_param mdt.*.md_stats=clear
-       do_facet ost $LCTL set_param obdfilter.*.stats=clear
+       do_facet ost1 $LCTL set_param obdfilter.*.stats=clear
 
        # extra mdt stats verification.
        chmod 444 ${testdir}/${tfile} || error "chmod failed"
@@ -6835,6 +6937,8 @@ test_133b() {
 run_test 133b "Verifying extra MDT stats =================================="
 
 test_133c() {
+       remote_ost_nodsh && skip "remote OST with nodsh" && return
+       remote_mds_nodsh && skip "remote MDS with nodsh" && return
        local testdir=$DIR/${tdir}/stats_testdir
        mkdir -p ${testdir} || error "mkdir failed"
 
@@ -6845,9 +6949,9 @@ test_133c() {
 
        # clear stats.
        do_facet $SINGLEMDS $LCTL set_param mdt.*.md_stats=clear
-       do_facet ost $LCTL set_param obdfilter.*.stats=clear
+       do_facet ost1 $LCTL set_param obdfilter.*.stats=clear
 
-       dd if=/dev/zero of=${testdir}/${tfile} conv=notrunc bs=1024k count=1 || error "dd failed"
+       dd if=/dev/zero of=${testdir}/${tfile} conv=notrunc bs=512k count=1 || error "dd failed"
        sync
        cancel_lru_locks osc
        check_stats ost "write" 1
@@ -6865,6 +6969,101 @@ test_133c() {
 }
 run_test 133c "Verifying OST stats ========================================"
 
+order_2() {
+    local value=$1
+    local orig=$value
+    local order=1
+
+    while [ $value -ge 2 ]; do
+        order=$((order*2))
+        value=$((value/2))
+    done
+
+    if [ $orig -gt $order ]; then
+        order=$((order*2))
+    fi
+    echo $order
+}
+
+size_in_KMGT() {
+    local value=$1
+    local size=('K' 'M' 'G' 'T');
+    local i=0
+    local size_string=$value
+
+    while [ $value -ge 1024 ]; do
+        if [ $i -gt 3 ]; then
+            #T is the biggest unit we get here, if that is bigger,
+            #just return XXXT
+            size_string=${value}T
+            break
+        fi
+        value=$((value >> 10))
+        if [ $value -lt 1024 ]; then
+            size_string=${value}${size[$i]}
+            break
+        fi
+        i=$((i + 1))
+    done
+
+    echo $size_string
+}
+
+get_rename_size() {
+    local size=$1
+    local sample=$(do_facet $SINGLEMDS $LCTL get_param mdt.*.rename_stats | \
+                   awk '/ '${size}'/ {print $4}' | sed -e "s/,//g")
+    echo $sample
+}
+
+test_133d() {
+    remote_ost_nodsh && skip "remote OST with nodsh" && return
+    remote_mds_nodsh && skip "remote MDS with nodsh" && return
+    local testdir1=$DIR/${tdir}/stats_testdir1
+    local testdir2=$DIR/${tdir}/stats_testdir2
+
+    do_facet $SINGLEMDS $LCTL set_param mdt.*.rename_stats=clear
+
+    mkdir -p ${testdir1} || error "mkdir failed"
+    mkdir -p ${testdir2} || error "mkdir failed"
+
+    createmany -o $testdir1/test 512 || error "createmany failed"
+    local testdir1_size=$(ls -l $DIR/${tdir} | \
+                          awk '/stats_testdir1/ {print $5}')
+    local testdir2_size=$(ls -l $DIR/${tdir} | \
+                          awk '/stats_testdir2/ {print $5}')
+
+    testdir1_size=$(order_2 $testdir1_size)
+    testdir2_size=$(order_2 $testdir2_size)
+
+    testdir1_size=$(size_in_KMGT $testdir1_size)
+    testdir2_size=$(size_in_KMGT $testdir2_size)
+
+    # check samedir rename size
+    mv ${testdir1}/test0 ${testdir1}/test_0
+    local samedir=$(do_facet $SINGLEMDS $LCTL get_param mdt.*.rename_stats | \
+                    grep 'same_dir')
+    local same_sample=$(get_rename_size $testdir1_size)
+    [ -z "$samedir" ] && error "samedir_rename_size count error"
+    [ $same_sample -eq 1 ] || error "samedir_rename_size count error"
+    echo "Check same dir rename stats success"
+
+    # check crossdir rename size
+    do_facet $SINGLEMDS $LCTL set_param mdt.*.rename_stats=clear
+    mv ${testdir1}/test_0 ${testdir2}/test_0
+    local crossdir=$(do_facet $SINGLEMDS $LCTL get_param mdt.*.rename_stats | \
+                     grep 'crossdir')
+    local src_sample=$(get_rename_size $testdir1_size)
+    local tgt_sample=$(get_rename_size $testdir2_size)
+    [ -z "$crossdir" ] && error "crossdir_rename_size count error"
+    [ $src_sample -eq 1 ] || error "crossdir_rename_size count error"
+    [ $tgt_sample -eq 1 ] || error "crossdir_rename_size count error"
+    echo "Check cross dir rename stats success"
+
+    rm -rf $DIR/${tdir}
+}
+run_test 133d "Verifying rename_stats ========================================"
+
 test_140() { #bug-17379
         mkdir -p $DIR/$tdir || error "Creating dir $DIR/$tdir"
         cd $DIR/$tdir || error "Changing to $DIR/$tdir"
@@ -7064,6 +7263,7 @@ test_155_small_load() {
 }
 
 test_155_big_load() {
+    remote_ost_nodsh && skip "remote OST with nodsh" && return
     local temp=$TMP/$tfile
     local file=$DIR/$tfile
 
@@ -7294,10 +7494,24 @@ err17935 () {
        error $*
     fi
 }
+
+changelog_chmask()
+{
+    MASK=$(do_facet $SINGLEMDS $LCTL get_param mdd.$MDT0.changelog_mask |\
+           grep -c $1)
+
+    if [ $MASK -eq 1 ]; then
+        do_facet $SINGLEMDS $LCTL set_param mdd.$MDT0.changelog_mask="-$1"
+    else
+        do_facet $SINGLEMDS $LCTL set_param mdd.$MDT0.changelog_mask="+$1"
+    fi
+}
+
 test_160() {
-    USER=$(do_facet $SINGLEMDS lctl --device $MDT0 changelog_register -n)
+    remote_mds_nodsh && skip "remote MDS with nodsh" && return
+    USER=$(do_facet $SINGLEMDS $LCTL --device $MDT0 changelog_register -n)
     echo "Registered as changelog user $USER"
-    do_facet $SINGLEMDS lctl get_param -n mdd.$MDT0.changelog_users | \
+    do_facet $SINGLEMDS $LCTL get_param -n mdd.$MDT0.changelog_users | \
        grep -q $USER || error "User $USER not found in changelog_users"
 
     # change something
@@ -7312,12 +7526,23 @@ test_160() {
     $LFS changelog $MDT0 | tail -5
 
     echo "verifying changelog mask"
-    do_facet $SINGLEMDS lctl set_param mdd.$MDT0.changelog_mask="-mkdir"
-    mkdir -p $DIR/$tdir/pics/2009/sofia
-    do_facet $SINGLEMDS lctl set_param mdd.$MDT0.changelog_mask="+mkdir"
-    mkdir $DIR/$tdir/pics/2009/zachary
-    DIRS=$($LFS changelog $MDT0 | tail -5 | grep -c MKDIR)
-    [ $DIRS -eq 1 ] || err17935 "changelog mask count $DIRS != 1"
+    changelog_chmask "MKDIR"
+    changelog_chmask "CLOSE"
+
+    mkdir -p $DIR/$tdir/pics/zach/sofia
+    echo "zzzzzz" > $DIR/$tdir/pics/zach/file
+
+    changelog_chmask "MKDIR"
+    changelog_chmask "CLOSE"
+
+    mkdir -p $DIR/$tdir/pics/2008/sofia
+    echo "zzzzzz" > $DIR/$tdir/pics/zach/file
+
+    $LFS changelog $MDT0
+    MKDIRS=$($LFS changelog $MDT0 | tail -5 | grep -c "MKDIR")
+    CLOSES=$($LFS changelog $MDT0 | tail -5 | grep -c "CLOSE")
+    [ $MKDIRS -eq 1 ] || err17935 "MKDIR changelog mask count $DIRS != 1"
+    [ $CLOSES -eq 1 ] || err17935 "CLOSE changelog mask count $DIRS != 1"
 
     # verify contents
     echo "verifying target fid"
@@ -7333,16 +7558,16 @@ test_160() {
     [ "$fidc" == "p=$fidf" ] || \
        err17935 "pfid in changelog $fidc != dir fid $fidf"
 
-    USER_REC1=$(do_facet $SINGLEMDS lctl get_param -n \
+    USER_REC1=$(do_facet $SINGLEMDS $LCTL get_param -n \
        mdd.$MDT0.changelog_users | grep $USER | awk '{print $2}')
     $LFS changelog_clear $MDT0 $USER $(($USER_REC1 + 5))
-    USER_REC2=$(do_facet $SINGLEMDS lctl get_param -n \
+    USER_REC2=$(do_facet $SINGLEMDS $LCTL get_param -n \
        mdd.$MDT0.changelog_users | grep $USER | awk '{print $2}')
     echo "verifying user clear: $(( $USER_REC1 + 5 )) == $USER_REC2"
     [ $USER_REC2 == $(($USER_REC1 + 5)) ] || \
        err17935 "user index should be $(($USER_REC1 + 5)); is $USER_REC2"
 
-    MIN_REC=$(do_facet $SINGLEMDS lctl get_param mdd.$MDT0.changelog_users | \
+    MIN_REC=$(do_facet $SINGLEMDS $LCTL get_param mdd.$MDT0.changelog_users | \
        awk 'min == "" || $2 < min {min = $2}; END {print min}')
     FIRST_REC=$($LFS changelog $MDT0 | head -1 | awk '{print $1}')
     echo "verifying min purge: $(( $MIN_REC + 1 )) == $FIRST_REC"
@@ -7350,17 +7575,17 @@ test_160() {
        err17935 "first index should be $(($MIN_REC + 1)); is $FIRST_REC"
 
     echo "verifying user deregister"
-    do_facet $SINGLEMDS lctl --device $MDT0 changelog_deregister $USER
-    do_facet $SINGLEMDS lctl get_param -n mdd.$MDT0.changelog_users | \
+    do_facet $SINGLEMDS $LCTL --device $MDT0 changelog_deregister $USER
+    do_facet $SINGLEMDS $LCTL get_param -n mdd.$MDT0.changelog_users | \
        grep -q $USER && error "User $USER still found in changelog_users"
 
-    USERS=$(( $(do_facet $SINGLEMDS lctl get_param -n \
+    USERS=$(( $(do_facet $SINGLEMDS $LCTL get_param -n \
        mdd.$MDT0.changelog_users | wc -l) - 2 ))
     if [ $USERS -eq 0 ]; then
-       LAST_REC1=$(do_facet $SINGLEMDS lctl get_param -n \
+       LAST_REC1=$(do_facet $SINGLEMDS $LCTL get_param -n \
            mdd.$MDT0.changelog_users | head -1 | awk '{print $3}')
        touch $DIR/$tdir/chloe
-       LAST_REC2=$(do_facet $SINGLEMDS lctl get_param -n \
+       LAST_REC2=$(do_facet $SINGLEMDS $LCTL get_param -n \
            mdd.$MDT0.changelog_users | head -1 | awk '{print $3}')
        echo "verify changelogs are off if we were the only user: $LAST_REC1 == $LAST_REC2"
        [ $LAST_REC1 == $LAST_REC2 ] || error "changelogs not off"
@@ -7620,6 +7845,7 @@ obdecho_create_test() {
 }
 
 test_180a() {
+        remote_ost_nodsh && skip "remote OST with nodsh" && return
         local rc=0
         local rmmod_local=0
 
@@ -7629,8 +7855,10 @@ test_180a() {
         fi
 
         local osc=$($LCTL dl | grep -v mdt | awk '$3 == "osc" {print $4; exit}')
-        local host=$(awk '/current_connection:/ {print $2}' /proc/fs/lustre/osc/$osc/import)
-        local target=$(awk '/target:/ {print $2}' /proc/fs/lustre/osc/$osc/import)
+        local host=$(lctl get_param -n osc.$osc.import |
+                             awk '/current_connection:/ {print $2}' )
+        local target=$(lctl get_param -n osc.$osc.import |
+                             awk '/target:/ {print $2}' )
         target=${target%_UUID}
 
         [[ -n $target ]]  && { setup_obdecho_osc $host $target || rc=1; } || rc=1
@@ -7642,15 +7870,16 @@ test_180a() {
 run_test 180a "test obdecho on osc"
 
 test_180b() {
+        remote_ost_nodsh && skip "remote OST with nodsh" && return
         local rc=0
         local rmmod_remote=0
 
-        do_facet ost "lsmod | grep -q obdecho || "                      \
-                     "{ insmod ${LUSTRE}/obdecho/obdecho.ko || "        \
-                     "modprobe obdecho; }" && rmmod_remote=1
-        target=$(do_facet ost $LCTL dl | awk '/obdfilter/ {print $4;exit}')
-        [[ -n $target ]] && { obdecho_create_test $target ost || rc=1; }
-        [ $rmmod_remote -eq 1 ] && do_facet ost "rmmod obdecho"
+        do_facet ost1 "lsmod | grep -q obdecho || "                      \
+                      "{ insmod ${LUSTRE}/obdecho/obdecho.ko || "        \
+                      "modprobe obdecho; }" && rmmod_remote=1
+        target=$(do_facet ost1 $LCTL dl | awk '/obdfilter/ {print $4;exit}')
+        [[ -n $target ]] && { obdecho_create_test $target ost1 || rc=1; }
+        [ $rmmod_remote -eq 1 ] && do_facet ost1 "rmmod obdecho"
         return $rc
 }
 run_test 180b "test obdecho directly on obdfilter"
@@ -8152,6 +8381,7 @@ test_215() { # for bugs 18102, 21079, 21517
 run_test 215 "/proc/sys/lnet exists and has proper content - bugs 18102, 21079, 21517"
 
 test_216() { # bug 20317
+        remote_ost_nodsh && skip "remote OST with nodsh" && return
         local node
         local p="$TMP/sanityN-$TESTNAME.parameters"
         save_lustre_params $HOSTNAME "osc.*.contention_seconds" > $p
@@ -8189,12 +8419,15 @@ run_test 216 "check lockless direct write works and updates file size and kms co
 
 test_217() { # bug 22430
        local node
+       local nid
+
        for node in $(nodes_list); do
-               if [[ $node = *-* ]] ; then
-                       echo "lctl ping $node@$NETTYPE"
-                       lctl ping $node@$NETTYPE
+               nid=$(host_nids_address $node $NETTYPE)
+               if [[ $nid = *-* ]] ; then
+                       echo "lctl ping $nid@$NETTYPE"
+                       lctl ping $nid@$NETTYPE
                else
-                       echo "skipping $node (no hiphen detected)"
+                       echo "skipping $node (no hyphen detected)"
                fi
        done
 }
@@ -8233,13 +8466,14 @@ test_219() {
 run_test 219 "LU-394: Write partial won't cause uncontiguous pages vec at LND"
 
 test_220() { #LU-325
+       remote_ost_nodsh && skip "remote OST with nodsh" && return
        local OSTIDX=0
 
        mkdir -p $DIR/$tdir
        local OST=$(lfs osts | grep ${OSTIDX}": " | \
                awk '{print $2}' | sed -e 's/_UUID$//')
 
-        # on the mdt's osc
+       # on the mdt's osc
        local mdtosc_proc1=$(get_mdtosc_proc_path $SINGLEMDS $OST)
        local last_id=$(do_facet $SINGLEMDS lctl get_param -n \
                        osc.$mdtosc_proc1.prealloc_last_id)
@@ -8248,20 +8482,22 @@ test_220() { #LU-325
 
        $LFS df -i
 
+       do_facet ost$((OSTIDX + 1)) lctl set_param fail_val=-1
+       #define OBD_FAIL_OST_ENOINO              0x229
+       do_facet ost$((OSTIDX + 1)) lctl set_param fail_loc=0x229
        do_facet mgs $LCTL pool_new $FSNAME.$TESTNAME || return 1
        do_facet mgs $LCTL pool_add $FSNAME.$TESTNAME $OST || return 2
 
        $SETSTRIPE $DIR/$tdir -i $OSTIDX -c 1 -p $FSNAME.$TESTNAME
 
-       echo "preallocated objects in MDS is $((last_id - next_id))" \
-             "($last_id - $next_id)"
+       MDSOBJS=$((last_id - next_id))
+       echo "preallocated objects on MDS is $MDSOBJS" "($last_id - $next_id)"
 
-       count=$($LFS df -i $MOUNT | grep ^$OST | awk '{print $4}')
-       echo "OST still has $count objects"
+       blocks=$($LFS df $MOUNT | awk '($1 == '$OSTIDX') { print $4 }')
+       echo "OST still has $count kbytes free"
 
-       free=$((count + last_id - next_id))
-       echo "create $((free - next_id)) files @next_id..."
-       createmany -o $DIR/$tdir/f $next_id $free || return 3
+       echo "create $MDSOBJS files @next_id..."
+       createmany -o $DIR/$tdir/f $MDSOBJS || return 3
 
        local last_id2=$(do_facet mds${MDSIDX} lctl get_param -n \
                        osc.$mdtosc_proc1.prealloc_last_id)
@@ -8273,12 +8509,70 @@ test_220() { #LU-325
 
        echo "cleanup..."
 
+       do_facet ost$((OSTIDX + 1)) lctl set_param fail_val=0
+       do_facet ost$((OSTIDX + 1)) lctl set_param fail_loc=0
+
        do_facet mgs $LCTL pool_remove $FSNAME.$TESTNAME $OST || return 4
        do_facet mgs $LCTL pool_destroy $FSNAME.$TESTNAME || return 5
-       echo "unlink $((free - next_id)) files @ $next_id..."
-       unlinkmany $DIR/$tdir/f $next_id $free || return 3
+       echo "unlink $MDSOBJS files @$next_id..."
+       unlinkmany $DIR/$tdir/f $MDSOBJS || return 6
 }
-run_test 220 "the preallocated objects in MDS still can be used if ENOSPC is returned by OST with enough disk space"
+run_test 220 "preallocated MDS objects still used if ENOSPC from OST"
+
+test_221() {
+        cp `which date` $MOUNT
+
+        #define OBD_FAIL_LLITE_FAULT_TRUNC_RACE  0x1401
+        $LCTL set_param fail_loc=0x80001401
+
+        $MOUNT/date > /dev/null
+        rm -f $MOUNT/date
+}
+run_test 221 "make sure fault and truncate race to not cause OOM"
+
+test_222a () {
+       rm -rf $DIR/$tdir
+       mkdir -p $DIR/$tdir
+       $LFS setstripe -c 1 -i 0 $DIR/$tdir
+       createmany -o $DIR/$tdir/$tfile 10
+       cancel_lru_locks mdc
+       cancel_lru_locks osc
+       #define OBD_FAIL_LDLM_AGL_DELAY           0x31a
+       $LCTL set_param fail_loc=0x31a
+       ls -l $DIR/$tdir > /dev/null || error "AGL for ls failed"
+       $LCTL set_param fail_loc=0
+       rm -r $DIR/$tdir
+}
+run_test 222a "AGL for ls should not trigger CLIO lock failure ================"
+
+test_222b () {
+       rm -rf $DIR/$tdir
+       mkdir -p $DIR/$tdir
+       $LFS setstripe -c 1 -i 0 $DIR/$tdir
+       createmany -o $DIR/$tdir/$tfile 10
+       cancel_lru_locks mdc
+       cancel_lru_locks osc
+       #define OBD_FAIL_LDLM_AGL_DELAY           0x31a
+       $LCTL set_param fail_loc=0x31a
+       rm -r $DIR/$tdir || "AGL for rmdir failed"
+       $LCTL set_param fail_loc=0
+}
+run_test 222b "AGL for rmdir should not trigger CLIO lock failure ============="
+
+test_223 () {
+       rm -rf $DIR/$tdir
+       mkdir -p $DIR/$tdir
+       $LFS setstripe -c 1 -i 0 $DIR/$tdir
+       createmany -o $DIR/$tdir/$tfile 10
+       cancel_lru_locks mdc
+       cancel_lru_locks osc
+       #define OBD_FAIL_LDLM_AGL_NOLOCK          0x31b
+       $LCTL set_param fail_loc=0x31b
+       ls -l $DIR/$tdir > /dev/null || error "reenqueue failed"
+       $LCTL set_param fail_loc=0
+       rm -r $DIR/$tdir
+}
+run_test 223 "osc reenqueue if without AGL lock granted ======================="
 
 #
 # tests that do cleanup/setup should be run at the end