Whamcloud - gitweb
LU-11185 mgc: config lock leak
[fs/lustre-release.git] / lustre / tests / sanity.sh
index 62ff94f..027271c 100644 (file)
@@ -45,8 +45,14 @@ ALWAYS_EXCEPT+="               42a     42b     42c "
 ALWAYS_EXCEPT+=" 407     312 "
 
 if $SHARED_KEY; then
-       # bug number:    LU-9795 LU-9795 LU-9795 LU-9795
-       ALWAYS_EXCEPT+=" 17n     60a     133g    300f "
+       # bug number:    LU-9795 LU-9795 LU-9795 LU-9795 LU-12781
+       ALWAYS_EXCEPT+=" 17n     60a     133g    300f    272a"
+fi
+
+selinux_status=$(getenforce)
+if [ "$selinux_status" != "Disabled" ]; then
+       # bug number:
+       ALWAYS_EXCEPT+=""
 fi
 
 # skip the grant tests for ARM until they are fixed
@@ -11355,41 +11361,52 @@ run_test 126 "check that the fsgid provided by the client is taken into account"
 
 test_127a() { # bug 15521
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
+       local name count samp unit min max sum sumsq
 
        $LFS setstripe -i 0 -c 1 $DIR/$tfile || error "setstripe failed"
+       echo "stats before reset"
+       $LCTL get_param osc.*.stats
        $LCTL set_param osc.*.stats=0
-       FSIZE=$((2048 * 1024))
-       dd if=/dev/zero of=$DIR/$tfile bs=$FSIZE count=1
+       local fsize=$((2048 * 1024))
+
+       dd if=/dev/zero of=$DIR/$tfile bs=$fsize count=1
        cancel_lru_locks osc
-       dd if=$DIR/$tfile of=/dev/null bs=$FSIZE
-
-       $LCTL get_param osc.*0000-osc-*.stats | grep samples > $DIR/${tfile}.tmp
-        while read NAME COUNT SAMP UNIT MIN MAX SUM SUMSQ; do
-                echo "got $COUNT $NAME"
-                [ ! $MIN ] && error "Missing min value for $NAME proc entry"
-                eval $NAME=$COUNT || error "Wrong proc format"
-
-                case $NAME in
-                        read_bytes|write_bytes)
-                        [ $MIN -lt 4096 ] && error "min is too small: $MIN"
-                        [ $MIN -gt $FSIZE ] && error "min is too big: $MIN"
-                        [ $MAX -lt 4096 ] && error "max is too small: $MAX"
-                        [ $MAX -gt $FSIZE ] && error "max is too big: $MAX"
-                        [ $SUM -ne $FSIZE ] && error "sum is wrong: $SUM"
-                        [ $SUMSQ -lt $(((FSIZE /4096) * (4096 * 4096))) ] &&
-                                error "sumsquare is too small: $SUMSQ"
-                        [ $SUMSQ -gt $((FSIZE * FSIZE)) ] &&
-                                error "sumsquare is too big: $SUMSQ"
-                        ;;
-                        *) ;;
-                esac
-        done < $DIR/${tfile}.tmp
-
-        #check that we actually got some stats
-        [ "$read_bytes" ] || error "Missing read_bytes stats"
-        [ "$write_bytes" ] || error "Missing write_bytes stats"
-        [ "$read_bytes" != 0 ] || error "no read done"
-        [ "$write_bytes" != 0 ] || error "no write done"
+       dd if=$DIR/$tfile of=/dev/null bs=$fsize
+
+       $LCTL get_param osc.*0000-osc-*.stats | grep samples > $DIR/$tfile.tmp
+       stack_trap "rm -f $TMP/$tfile.tmp"
+       while read name count samp unit min max sum sumsq; do
+               echo "got name=$name count=$count unit=$unit min=$min max=$max"
+               [ ! $min ] && error "Missing min value for $name proc entry"
+               eval $name=$count || error "Wrong proc format"
+
+               case $name in
+               read_bytes|write_bytes)
+                       [[ "$unit" =~ "bytes" ]] ||
+                               error "unit is not 'bytes': $unit"
+                       (( $min >= 4096 )) || error "min is too small: $min"
+                       (( $min <= $fsize )) || error "min is too big: $min"
+                       (( $max >= 4096 )) || error "max is too small: $max"
+                       (( $max <= $fsize )) || error "max is too big: $max"
+                       (( $sum == $fsize )) || error "sum is wrong: $sum"
+                       (( $sumsq >= ($fsize / 4096) * (4096 * 4096) )) ||
+                               error "sumsquare is too small: $sumsq"
+                       (( $sumsq <= $fsize * $fsize )) ||
+                               error "sumsquare is too big: $sumsq"
+                       ;;
+               ost_read|ost_write)
+                       [[ "$unit" =~ "usec" ]] ||
+                               error "unit is not 'usec': $unit"
+                       ;;
+               *)      ;;
+               esac
+       done < $DIR/$tfile.tmp
+
+       #check that we actually got some stats
+       [ "$read_bytes" ] || error "Missing read_bytes stats"
+       [ "$write_bytes" ] || error "Missing write_bytes stats"
+       [ "$read_bytes" != 0 ] || error "no read done"
+       [ "$write_bytes" != 0 ] || error "no write done"
 }
 run_test 127a "verify the client stats are sane"
 
@@ -11397,6 +11414,8 @@ test_127b() { # bug LU-333
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
        local name count samp unit min max sum sumsq
 
+       echo "stats before reset"
+       $LCTL get_param llite.*.stats
        $LCTL set_param llite.*.stats=0
 
        # perform 2 reads and writes so MAX is different from SUM.
@@ -11407,30 +11426,28 @@ test_127b() { # bug LU-333
        dd if=$DIR/$tfile of=/dev/null bs=$PAGE_SIZE count=1
 
        $LCTL get_param llite.*.stats | grep samples > $TMP/$tfile.tmp
+       stack_trap "rm -f $TMP/$tfile.tmp"
        while read name count samp unit min max sum sumsq; do
-               echo "got $count $name"
+               echo "got name=$name count=$count unit=$unit min=$min max=$max"
                eval $name=$count || error "Wrong proc format"
 
                case $name in
-               read_bytes)
-                       [ $count -ne 2 ] && error "count is not 2: $count"
-                       [ $min -ne $PAGE_SIZE ] &&
+               read_bytes|write_bytes)
+                       [[ "$unit" =~ "bytes" ]] ||
+                               error "unit is not 'bytes': $unit"
+                       (( $count == 2 )) || error "count is not 2: $count"
+                       (( $min == $PAGE_SIZE )) ||
                                error "min is not $PAGE_SIZE: $min"
-                       [ $max -ne $PAGE_SIZE ] &&
-                               error "max is incorrect: $max"
-                       [ $sum -ne $((PAGE_SIZE * 2)) ] &&
-                               error "sum is wrong: $sum"
+                       (( $max == $PAGE_SIZE )) ||
+                               error "max is not $PAGE_SIZE: $max"
+                       (( $sum == $PAGE_SIZE * 2 )) ||
+                               error "sum is not $((PAGE_SIZE * 2)): $sum"
                        ;;
-               write_bytes)
-                       [ $count -ne 2 ] && error "count is not 2: $count"
-                       [ $min -ne $PAGE_SIZE ] &&
-                               error "min is not $PAGE_SIZE: $min"
-                       [ $max -ne $PAGE_SIZE ] &&
-                               error "max is incorrect: $max"
-                       [ $sum -ne $((PAGE_SIZE * 2)) ] &&
-                               error "sum is wrong: $sum"
+               read|write)
+                       [[ "$unit" =~ "usec" ]] ||
+                               error "unit is not 'usec': $unit"
                        ;;
-               *) ;;
+               *)      ;;
                esac
        done < $TMP/$tfile.tmp
 
@@ -11439,8 +11456,6 @@ test_127b() { # bug LU-333
        [ "$write_bytes" ] || error "Missing write_bytes stats"
        [ "$read_bytes" != 0 ] || error "no read done"
        [ "$write_bytes" != 0 ] || error "no write done"
-
-       rm -f $TMP/${tfile}.tmp
 }
 run_test 127b "verify the llite client stats are sane"
 
@@ -12692,8 +12707,9 @@ test_151() {
                error "NOT IN CACHE: before: $BEFORE, after: $AFTER"
        fi
 
-        # the following read invalidates the cache
         cancel_lru_locks osc
+       # invalidates OST cache
+       do_nodes $list "echo 1 > /proc/sys/vm/drop_caches"
        set_osd_param $list '' read_cache_enable 0
         cat $DIR/$tfile >/dev/null
 
@@ -13338,9 +13354,9 @@ test_156() {
        cat $file >/dev/null
        AFTER=$(roc_hit)
        if ! let "AFTER - BEFORE == CPAGES"; then
-               error "NOT IN CACHE: before: $BEFORE, after: $AFTER"
+               error "NOT IN CACHE (2): before: $BEFORE, after: $AFTER"
        else
-               log "cache hits:: before: $BEFORE, after: $AFTER"
+               log "cache hits: before: $BEFORE, after: $AFTER"
        fi
 
        log "Read again; it should be satisfied from the cache."
@@ -13349,7 +13365,7 @@ test_156() {
        cat $file >/dev/null
        AFTER=$(roc_hit)
        if ! let "AFTER - BEFORE == CPAGES"; then
-               error "NOT IN CACHE: before: $BEFORE, after: $AFTER"
+               error "NOT IN CACHE (3): before: $BEFORE, after: $AFTER"
        else
                log "cache hits:: before: $BEFORE, after: $AFTER"
        fi
@@ -13364,20 +13380,23 @@ test_156() {
        cat $file >/dev/null
        AFTER=$(roc_hit)
        if ! let "AFTER - BEFORE == CPAGES"; then
-               error "NOT IN CACHE: before: $BEFORE, after: $AFTER"
+               error "NOT IN CACHE (4): before: $BEFORE, after: $AFTER"
        else
                log "cache hits:: before: $BEFORE, after: $AFTER"
        fi
 
-       log "Read again; it should not be satisfied from the cache."
-       BEFORE=$AFTER
-       cancel_lru_locks osc
-       cat $file >/dev/null
-       AFTER=$(roc_hit)
-       if ! let "AFTER - BEFORE == 0"; then
-               error "IN CACHE: before: $BEFORE, after: $AFTER"
-       else
-               log "cache hits:: before: $BEFORE, after: $AFTER"
+       if [ $OST1_VERSION -lt $(version_code 2.12.55) ]; then
+               # > 2.12.56 uses pagecache if cached
+               log "Read again; it should not be satisfied from the cache."
+               BEFORE=$AFTER
+               cancel_lru_locks osc
+               cat $file >/dev/null
+               AFTER=$(roc_hit)
+               if ! let "AFTER - BEFORE == 0"; then
+                       error "IN CACHE (5): before: $BEFORE, after: $AFTER"
+               else
+                       log "cache hits:: before: $BEFORE, after: $AFTER"
+               fi
        fi
 
        log "Write data and read it back."
@@ -13388,20 +13407,23 @@ test_156() {
        cat $file >/dev/null
        AFTER=$(roc_hit)
        if ! let "AFTER - BEFORE == CPAGES"; then
-               error "NOT IN CACHE: before: $BEFORE, after: $AFTER"
+               error "NOT IN CACHE (6): before: $BEFORE, after: $AFTER"
        else
                log "cache hits:: before: $BEFORE, after: $AFTER"
        fi
 
-       log "Read again; it should not be satisfied from the cache."
-       BEFORE=$AFTER
-       cancel_lru_locks osc
-       cat $file >/dev/null
-       AFTER=$(roc_hit)
-       if ! let "AFTER - BEFORE == 0"; then
-               error "IN CACHE: before: $BEFORE, after: $AFTER"
-       else
-               log "cache hits:: before: $BEFORE, after: $AFTER"
+       if [ $OST1_VERSION -lt $(version_code 2.12.55) ]; then
+               # > 2.12.56 uses pagecache if cached
+               log "Read again; it should not be satisfied from the cache."
+               BEFORE=$AFTER
+               cancel_lru_locks osc
+               cat $file >/dev/null
+               AFTER=$(roc_hit)
+               if ! let "AFTER - BEFORE == 0"; then
+                       error "IN CACHE (7): before: $BEFORE, after: $AFTER"
+               else
+                       log "cache hits:: before: $BEFORE, after: $AFTER"
+               fi
        fi
 
        log "Turn off read and write cache"
@@ -13417,7 +13439,7 @@ test_156() {
        cat $file >/dev/null
        AFTER=$(roc_hit)
        if ! let "AFTER - BEFORE == 0"; then
-               error_ignore bz20762 "IN CACHE: before: $BEFORE, after: $AFTER"
+               error_ignore bz20762 "IN CACHE (8):before:$BEFORE,after:$AFTER"
        else
                log "cache hits:: before: $BEFORE, after: $AFTER"
        fi
@@ -13435,7 +13457,7 @@ test_156() {
        cat $file >/dev/null
        AFTER=$(roc_hit)
        if ! let "AFTER - BEFORE == 0"; then
-               error_ignore bz20762 "IN CACHE: before: $BEFORE, after: $AFTER"
+               error_ignore bz20762 "IN CACHE (9):before:$BEFORE,after:$AFTER"
        else
                log "cache hits:: before: $BEFORE, after: $AFTER"
        fi
@@ -13446,7 +13468,7 @@ test_156() {
        cat $file >/dev/null
        AFTER=$(roc_hit)
        if ! let "AFTER - BEFORE == CPAGES"; then
-               error "NOT IN CACHE: before: $BEFORE, after: $AFTER"
+               error "NOT IN CACHE (1): before: $BEFORE, after: $AFTER"
        else
                log "cache hits:: before: $BEFORE, after: $AFTER"
        fi
@@ -16904,6 +16926,61 @@ test_230l() {
 }
 run_test 230l "readdir between MDTs won't crash"
 
+test_230m() {
+       [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs"
+       [ $MDS1_VERSION -lt $(version_code 2.11.56) ] &&
+               skip "Need MDS version at least 2.11.56"
+
+       local MDTIDX=1
+       local mig_dir=$DIR/$tdir/migrate_dir
+       local longstr="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+       local shortstr="b"
+       local val
+
+       echo "Creating files and dirs with xattrs"
+       test_mkdir $DIR/$tdir
+       test_mkdir -i0 -c1 $mig_dir
+       mkdir $mig_dir/dir
+       setfattr -n user.attr1 -v $longstr $mig_dir/dir ||
+               error "cannot set xattr attr1 on dir"
+       setfattr -n user.attr2 -v $shortstr $mig_dir/dir ||
+               error "cannot set xattr attr2 on dir"
+       touch $mig_dir/dir/f0
+       setfattr -n user.attr1 -v $longstr $mig_dir/dir/f0 ||
+               error "cannot set xattr attr1 on file"
+       setfattr -n user.attr2 -v $shortstr $mig_dir/dir/f0 ||
+               error "cannot set xattr attr2 on file"
+       sync ; sync ; echo 3 > /proc/sys/vm/drop_caches
+       val=$(getfattr --only-values -n user.attr1 $mig_dir/dir 2>/dev/null)
+       [ "$val" = $longstr ] || error "xattr attr1 not set properly on dir"
+       val=$(getfattr --only-values -n user.attr2 $mig_dir/dir 2>/dev/null)
+       [ "$val" = $shortstr ] || error "xattr attr2 not set properly on dir"
+       val=$(getfattr --only-values -n user.attr1 $mig_dir/dir/f0 2>/dev/null)
+       [ "$val" = $longstr ] || error "xattr attr1 not set properly on file"
+       val=$(getfattr --only-values -n user.attr2 $mig_dir/dir/f0 2>/dev/null)
+       [ "$val" = $shortstr ] || error "xattr attr2 not set properly on file"
+
+       echo "Migrating to MDT1"
+       $LFS migrate -m $MDTIDX $mig_dir ||
+               error "fails on migrating dir to MDT1"
+
+       sync ; sync ; echo 3 > /proc/sys/vm/drop_caches
+       echo "Checking xattrs"
+       val=$(getfattr --only-values -n user.attr1 $mig_dir/dir 2>/dev/null)
+       [ "$val" = $longstr ] ||
+               error "expecting xattr1 $longstr on dir, found $val"
+       val=$(getfattr --only-values -n user.attr2 $mig_dir/dir 2>/dev/null)
+       [ "$val" = $shortstr ] ||
+               error "expecting xattr2 $shortstr on dir, found $val"
+       val=$(getfattr --only-values -n user.attr1 $mig_dir/dir/f0 2>/dev/null)
+       [ "$val" = $longstr ] ||
+               error "expecting xattr1 $longstr on file, found $val"
+       val=$(getfattr --only-values -n user.attr2 $mig_dir/dir/f0 2>/dev/null)
+       [ "$val" = $shortstr ] ||
+               error "expecting xattr2 $shortstr on file, found $val"
+}
+run_test 230m "xattrs not changed after dir migration"
+
 test_231a()
 {
        # For simplicity this test assumes that max_pages_per_rpc
@@ -17308,21 +17385,6 @@ test_245() {
 }
 run_test 245 "check mdc connection flag/data: multiple modify RPCs"
 
-test_246() { # LU-7371
-       remote_ost_nodsh && skip "remote OST with nodsh"
-       [ $OST1_VERSION -lt $(version_code 2.7.62) ] &&
-               skip "Need OST version >= 2.7.62"
-
-       do_facet ost1 $LCTL set_param fail_val=4095
-#define OBD_FAIL_OST_READ_SIZE         0x234
-       do_facet ost1 $LCTL set_param fail_loc=0x234
-       $LFS setstripe $DIR/$tfile -i 0 -c 1
-       dd if=/dev/zero of=$DIR/$tfile bs=4095 count=1 > /dev/null 2>&1
-       cancel_lru_locks $FSNAME-OST0000
-       dd if=$DIR/$tfile of=/dev/null bs=1048576 || error "Read failed"
-}
-run_test 246 "Read file of size 4095 should return right length"
-
 cleanup_247() {
        local submount=$1
 
@@ -17415,7 +17477,7 @@ test_247e() {
 }
 run_test 247e "mount .. as fileset"
 
-test_248() {
+test_248a() {
        local fast_read_sav=$($LCTL get_param -n llite.*.fast_read 2>/dev/null)
        [ -z "$fast_read_sav" ] && skip "no fast read support"
 
@@ -17466,7 +17528,89 @@ test_248() {
        $LCTL set_param -n llite.*.fast_read=$fast_read_sav
        rm -f $DIR/$tfile
 }
-run_test 248 "fast read verification"
+run_test 248a "fast read verification"
+
+test_248b() {
+       # Default short_io_bytes=16384, try both smaller and larger sizes.
+       # Lustre O_DIRECT read and write needs to be a multiple of PAGE_SIZE.
+       # 6017024 = 2^12*13*113 = 47008*128 = 11752*512 = 4096*1469 = 53248*113
+       echo "bs=53248 count=113 normal buffered write"
+       dd if=/dev/urandom of=$TMP/$tfile.0 bs=53248 count=113 ||
+               error "dd of initial data file failed"
+       stack_trap "rm -f $DIR/$tfile.[0-3] $TMP/$tfile.[0-3]" EXIT
+
+       echo "bs=47008 count=128 oflag=dsync normal write $tfile.0"
+       dd if=$TMP/$tfile.0 of=$DIR/$tfile.0 bs=47008 count=128 oflag=dsync ||
+               error "dd with sync normal writes failed"
+       cmp $TMP/$tfile.0 $DIR/$tfile.0 || error "compare $DIR/$tfile.0 failed"
+
+       echo "bs=11752 count=512 oflag=dsync small write $tfile.1"
+       dd if=$TMP/$tfile.0 of=$DIR/$tfile.1 bs=11752 count=512 oflag=dsync ||
+               error "dd with sync small writes failed"
+       cmp $TMP/$tfile.0 $DIR/$tfile.1 || error "compare $DIR/$tfile.1 failed"
+
+       cancel_lru_locks osc
+
+       # calculate the small O_DIRECT size and count for the client PAGE_SIZE
+       local num=$((13 * 113 / (PAGE_SIZE / 4096)))
+       echo "bs=$PAGE_SIZE count=$num iflag=direct small read $tfile.1"
+       dd if=$DIR/$tfile.1 of=$TMP/$tfile.1 bs=$PAGE_SIZE count=$num \
+               iflag=direct || error "dd with O_DIRECT small read failed"
+       # adjust bytes checked to handle larger PAGE_SIZE for ARM/PPC
+       cmp --bytes=$((PAGE_SIZE * num)) $TMP/$tfile.0 $TMP/$tfile.1 ||
+               error "compare $TMP/$tfile.1 failed"
+
+       local save=$($LCTL get_param -n osc.*OST000*.short_io_bytes | head -n 1)
+       stack_trap "$LCTL set_param osc.$FSNAME-*.short_io_bytes=$save" EXIT
+
+       # just to see what the maximum tunable value is, and test parsing
+       echo "test invalid parameter 2MB"
+       $LCTL set_param osc.$FSNAME-OST0000*.short_io_bytes=2M &&
+               error "too-large short_io_bytes allowed"
+       echo "test maximum parameter 512KB"
+       # if we can set a larger short_io_bytes, run test regardless of version
+       if ! $LCTL set_param osc.$FSNAME-OST0000*.short_io_bytes=512K; then
+               # older clients may not allow setting it this large, that's OK
+               [ $CLIENT_VERSION -ge $(version_code 2.13.50) ] ||
+                       skip "Need at least client version 2.13.50"
+               error "medium short_io_bytes failed"
+       fi
+       $LCTL get_param osc.$FSNAME-OST0000*.short_io_bytes
+       size=$($LCTL get_param -n osc.$FSNAME-OST0000*.short_io_bytes)
+
+       echo "test large parameter 64KB"
+       $LCTL set_param osc.$FSNAME-*.short_io_bytes=65536
+       $LCTL get_param osc.$FSNAME-OST0000*.short_io_bytes
+
+       echo "bs=47008 count=128 oflag=dsync large write $tfile.2"
+       dd if=$TMP/$tfile.0 of=$DIR/$tfile.2 bs=47008 count=128 oflag=dsync ||
+               error "dd with sync large writes failed"
+       cmp $TMP/$tfile.0 $DIR/$tfile.2 || error "compare $DIR/$tfile.2 failed"
+
+       # calculate the large O_DIRECT size and count for the client PAGE_SIZE
+       local size=$(((4096 * 13 + PAGE_SIZE - 1) / PAGE_SIZE * PAGE_SIZE))
+       num=$((113 * 4096 / PAGE_SIZE))
+       echo "bs=$size count=$num oflag=direct large write $tfile.3"
+       dd if=$TMP/$tfile.0 of=$DIR/$tfile.3 bs=$size count=$num oflag=direct ||
+               error "dd with O_DIRECT large writes failed"
+       cmp --bytes=$((size * num)) $TMP/$tfile.0 $DIR/$tfile.3 ||
+               error "compare $DIR/$tfile.3 failed"
+
+       cancel_lru_locks osc
+
+       echo "bs=$size count=$num iflag=direct large read $tfile.2"
+       dd if=$DIR/$tfile.2 of=$TMP/$tfile.2 bs=$size count=$num iflag=direct ||
+               error "dd with O_DIRECT large read failed"
+       cmp --bytes=$((size * num)) $TMP/$tfile.0 $TMP/$tfile.2 ||
+               error "compare $TMP/$tfile.2 failed"
+
+       echo "bs=$size count=$num iflag=direct large read $tfile.3"
+       dd if=$DIR/$tfile.3 of=$TMP/$tfile.3 bs=$size count=$num iflag=direct ||
+               error "dd with O_DIRECT large read failed"
+       cmp --bytes=$((size * num)) $TMP/$tfile.0 $TMP/$tfile.3 ||
+               error "compare $TMP/$tfile.3 failed"
+}
+run_test 248b "test short_io read and write for both small and large sizes"
 
 test_249() { # LU-7890
        [ $MDS1_VERSION -lt $(version_code 2.8.53) ] &&
@@ -20782,14 +20926,14 @@ test_qos_mkdir() {
                lod.lustre-MDT0000-mdtlov.mdt_qos_prio_free | head -n1)
        lod_qos_prio_free=${lod_qos_prio_free%%%}
        lod_qos_threshold_rr=$(do_facet mds1 $LCTL get_param -n \
-               lod.lustre-MDT0000-mdtlov.mdt_qos_thresholdrr | head -n1)
+               lod.lustre-MDT0000-mdtlov.mdt_qos_threshold_rr | head -n1)
        lod_qos_threshold_rr=${lod_qos_threshold_rr%%%}
        lod_qos_maxage=$(do_facet mds1 $LCTL get_param -n \
                lod.lustre-MDT0000-mdtlov.qos_maxage | awk '{ print $1 }')
        stack_trap "do_nodes $mdts $LCTL set_param \
                lod.*.mdt_qos_prio_free=$lod_qos_prio_free > /dev/null" EXIT
        stack_trap "do_nodes $mdts $LCTL set_param \
-               lod.*.mdt_qos_thresholdrr=$lod_qos_threshold_rr > /dev/null" \
+               lod.*.mdt_qos_threshold_rr=$lod_qos_threshold_rr > /dev/null" \
                EXIT
        stack_trap "do_nodes $mdts $LCTL set_param \
                lod.*.mdt_qos_maxage=$lod_qos_maxage > /dev/null" EXIT
@@ -20798,7 +20942,7 @@ test_qos_mkdir() {
        echo "Mkdir (stripe_count $stripe_count) roundrobin:"
 
        $LCTL set_param lmv.*.qos_threshold_rr=100 > /dev/null
-       do_nodes $mdts $LCTL set_param lod.*.mdt_qos_thresholdrr=100 > /dev/null
+       do_nodes $mdts $LCTL set_param lod.*.mdt_qos_threshold_rr=100 > /dev/null
 
        testdir=$DIR/$tdir-s$stripe_count/rr
 
@@ -20826,7 +20970,7 @@ test_qos_mkdir() {
 
        $LCTL set_param lmv.*.qos_threshold_rr=$lmv_qos_threshold_rr > /dev/null
        do_nodes $mdts $LCTL set_param \
-               lod.*.mdt_qos_thresholdrr=$lod_qos_threshold_rr > /dev/null
+               lod.*.mdt_qos_threshold_rr=$lod_qos_threshold_rr > /dev/null
 
        echo
        echo "Check for uneven MDTs: "
@@ -22574,6 +22718,31 @@ test_900() {
 }
 run_test 900 "umount should not race with any mgc requeue thread"
 
+# LUS-6253/LU-11185
+test_901() {
+       local oldc
+       local newc
+       local olds
+       local news
+       [ $PARALLEL == "yes" ] && skip "skip parallel run"
+
+       # some get_param have a bug to handle dot in param name
+       cancel_lru_locks MGC
+       oldc=$($LCTL get_param -n 'ldlm.namespaces.MGC*.lock_count')
+       olds=$(do_facet mgs $LCTL get_param -n 'ldlm.namespaces.MGS*.lock_count')
+       umount_client $MOUNT || error "umount failed"
+       mount_client $MOUNT || error "mount failed"
+       cancel_lru_locks MGC
+       newc=$($LCTL get_param -n 'ldlm.namespaces.MGC*.lock_count')
+       news=$(do_facet mgs $LCTL get_param -n 'ldlm.namespaces.MGS*.lock_count')
+
+       [ $oldc -lt $newc ] && error "mgc lock leak ($oldc != $newc)"
+       [ $olds -lt $news ] && error "mgs lock leak ($olds != $news)"
+
+       return 0
+}
+run_test 901 "don't leak a mgc lock on client umount"
+
 complete $SECONDS
 [ -f $EXT2_DEV ] && rm $EXT2_DEV || true
 check_and_cleanup_lustre