Whamcloud - gitweb
LU-5242 osd-zfs: umount hang in sanity 133g
[fs/lustre-release.git] / lustre / tests / sanity.sh
index 8867c60..6668329 100644 (file)
@@ -58,11 +58,11 @@ init_test_env $@
 . ${CONFIG:=$LUSTRE/tests/cfg/${NAME}.sh}
 init_logging
 
-[ "$SLOW" = "no" ] && EXCEPT_SLOW="24o 27m 64b 68 71 77f 78 115 124b 230d"
+[ "$SLOW" = "no" ] && EXCEPT_SLOW="24o 24D 27m 64b 68 71 77f 78 115 124b 230d"
 
 if [ $(facet_fstype $SINGLEMDS) = "zfs" ]; then
-       # bug number for skipped test: LU-1593  LU-4536 LU-5242 LU-1957 LU-2805
-       ALWAYS_EXCEPT="$ALWAYS_EXCEPT  34h      65ic    132     180     184c"
+       # bug number for skipped test: LU-1593  LU-4536 LU-5242  LU-1957 LU-2805
+       ALWAYS_EXCEPT="$ALWAYS_EXCEPT  34h      65ic    78 79 80 180     184c"
        [ "$SLOW" = "no" ] && EXCEPT_SLOW="$EXCEPT_SLOW 51b 51ba"
 fi
 
@@ -664,7 +664,7 @@ test_17n() {
        check_fs_consistency_17n ||
                error "e2fsck report error after create files under remote dir"
 
-       for ((i=0;i<10;i++)); do
+       for ((i = 0; i < 10; i++)); do
                rm -rf $DIR/$tdir/remote_dir_${i} ||
                        error "destroy remote dir error $i"
        done
@@ -675,16 +675,16 @@ test_17n() {
        [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.4.50) ] &&
                skip "lustre < 2.4.50 does not support migrate mv " && return
 
-       for ((i=0; i<10; i++)); do
+       for ((i = 0; i < 10; i++)); do
                mkdir -p $DIR/$tdir/remote_dir_${i}
                createmany -o $DIR/$tdir/remote_dir_${i}/f 10 ||
                        error "create files under remote dir failed $i"
-               $LFS mv -M 1 $DIR/$tdir/remote_dir_${i} ||
+               $LFS mv --mdt-index 1 $DIR/$tdir/remote_dir_${i} ||
                        error "migrate remote dir error $i"
        done
        check_fs_consistency_17n || error "e2fsck report error after migration"
 
-       for ((i=0;i<10;i++)); do
+       for ((i = 0; i < 10; i++)); do
                rm -rf $DIR/$tdir/remote_dir_${i} ||
                        error "destroy remote dir error $i"
        done
@@ -1251,6 +1251,23 @@ test_24C() {
 }
 run_test 24C "check .. in striped dir"
 
+test_24D() { # LU-6101
+       local NFILES=50000
+
+       rm -rf $DIR/$tdir
+       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)
+       local v=$(ls -ai $DIR/$tdir | sort -u | wc -l)
+       if [ $t -ne $NFILES -o $u -ne $NFILES -o $v -ne $((NFILES + 2)) ] ; then
+               error "Expected $NFILES files, got $t ($u unique $v .&..)"
+       fi
+
+       rm -rf $DIR/$tdir || error "Can not delete directories"
+}
+run_test 24D "readdir() returns correct number of entries after cursor reload"
+
 test_25a() {
        echo '== symlink sanity ============================================='
 
@@ -1464,34 +1481,33 @@ exhaust_precreations() {
        local OSTIDX=$1
        local FAILLOC=$2
        local FAILIDX=${3:-$OSTIDX}
+       local ofacet=ost$((OSTIDX + 1))
 
-       test_mkdir -p $DIR/$tdir
-       local MDSIDX=$(get_mds_dir "$DIR/$tdir")
-       echo OSTIDX=$OSTIDX MDSIDX=$MDSIDX
+       test_mkdir -p -c1 $DIR/$tdir
+       local mdtidx=$($LFS getstripe -M $DIR/$tdir)
+       local mfacet=mds$((mdtidx + 1))
+       echo OSTIDX=$OSTIDX MDTIDX=$mdtidx
 
        local OST=$(ostname_from_index $OSTIDX)
-       local MDT_INDEX=$(lfs df | grep "\[MDT:$((MDSIDX - 1))\]" | awk '{print $1}' | \
-                         sed -e 's/_UUID$//;s/^.*-//')
 
        # on the mdt's osc
-       local mdtosc_proc1=$(get_mdtosc_proc_path mds${MDSIDX} $OST)
-       local last_id=$(do_facet mds${MDSIDX} lctl get_param -n \
+       local mdtosc_proc1=$(get_mdtosc_proc_path $mfacet $OST)
+       local last_id=$(do_facet $mfacet lctl get_param -n \
                        osc.$mdtosc_proc1.prealloc_last_id)
-       local next_id=$(do_facet mds${MDSIDX} lctl get_param -n \
+       local next_id=$(do_facet $mfacet lctl get_param -n \
                        osc.$mdtosc_proc1.prealloc_next_id)
 
-       local mdtosc_proc2=$(get_mdtosc_proc_path mds${MDSIDX})
-       do_facet mds${MDSIDX} lctl get_param osc.$mdtosc_proc2.prealloc*
+       local mdtosc_proc2=$(get_mdtosc_proc_path $mfacet)
+       do_facet $mfacet lctl get_param osc.$mdtosc_proc2.prealloc*
 
        test_mkdir -p $DIR/$tdir/${OST}
        $SETSTRIPE -i $OSTIDX -c 1 $DIR/$tdir/${OST}
 #define OBD_FAIL_OST_ENOSPC              0x215
-       do_facet ost$((OSTIDX + 1)) lctl set_param fail_val=$FAILIDX
-       do_facet ost$((OSTIDX + 1)) lctl set_param fail_loc=0x215
+       do_facet $ofacet lctl set_param fail_val=$FAILIDX fail_loc=0x215
        echo "Creating to objid $last_id on ost $OST..."
        createmany -o $DIR/$tdir/${OST}/f $next_id $((last_id - next_id + 2))
-       do_facet mds${MDSIDX} lctl get_param osc.$mdtosc_proc2.prealloc*
-       do_facet ost$((OSTIDX + 1)) lctl set_param fail_loc=$FAILLOC
+       do_facet $mfacet lctl get_param osc.$mdtosc_proc2.prealloc*
+       do_facet $ofacet lctl set_param fail_loc=$FAILLOC
        sleep_maxage
 }
 
@@ -2713,6 +2729,35 @@ test_33e() {
 }
 run_test 33e "mkdir and striped directory should have same mode"
 
+cleanup_33f() {
+       trap 0
+       do_facet $SINGLEMDS $LCTL set_param mdt.*.enable_remote_dir_gid=0
+}
+
+test_33f() {
+       [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+
+       mkdir $DIR/$tdir
+       chmod go+rwx $DIR/$tdir
+       do_facet $SINGLEMDS $LCTL set_param mdt.*.enable_remote_dir_gid=-1
+       trap cleanup_33f EXIT
+
+       $RUNAS lfs mkdir -c$MDSCOUNT $DIR/$tdir/striped_dir ||
+               error "cannot create striped directory"
+
+       $RUNAS touch $DIR/$tdir/striped_dir/{0..16} ||
+               error "cannot create files in striped directory"
+
+       $RUNAS rm $DIR/$tdir/striped_dir/{0..16} ||
+               error "cannot remove files in striped directory"
+
+       $RUNAS rmdir $DIR/$tdir/striped_dir ||
+               error "cannot remove striped directory"
+
+       cleanup_33f
+}
+run_test 33f "nonroot user can create, access, and remove a striped directory"
+
 TEST_34_SIZE=${TEST_34_SIZE:-2000000000000}
 test_34a() {
        rm -f $DIR/f34
@@ -4989,16 +5034,17 @@ test_57b() {
        fi
 
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
-       local dir=$DIR/d57b
+       local dir=$DIR/$tdir
 
        local FILECOUNT=100
        local FILE1=$dir/f1
        local FILEN=$dir/f$FILECOUNT
 
        rm -rf $dir || error "removing $dir"
-       test_mkdir -p $dir || error "creating $dir"
-       local num=$(get_mds_dir $dir)
-       local mymds=mds$num
+       test_mkdir -p -c1 $dir || error "creating $dir"
+       local mdtidx=$($LFS getstripe -M $dir)
+       local mdtname=MDT$(printf %04x $mdtidx)
+       local facet=mds$((mdtidx + 1))
 
        echo "mcreating $FILECOUNT files"
        createmany -m $dir/f 1 $FILECOUNT || \
@@ -5011,9 +5057,9 @@ test_57b() {
        sync
        sleep 1
        df $dir  #make sure we get new statfs data
-       local MDSFREE=$(do_facet $mymds \
-               lctl get_param -n osd*.*MDT000$((num -1)).kbytesfree)
-       local MDCFREE=$(lctl get_param -n mdc.*MDT000$((num -1))-mdc-*.kbytesfree)
+       local MDSFREE=$(do_facet $facet \
+               lctl get_param -n osd*.*$mdtname.kbytesfree)
+       local MDCFREE=$(lctl get_param -n mdc.*$mdtname-mdc-*.kbytesfree)
        echo "opening files to create objects/EAs"
        local FILE
        for FILE in `seq -f $dir/f%g 1 $FILECOUNT`; do
@@ -5026,9 +5072,9 @@ test_57b() {
 
        sleep 1  #make sure we get new statfs data
        df $dir
-       local MDSFREE2=$(do_facet $mymds \
-               lctl get_param -n osd*.*MDT000$((num -1)).kbytesfree)
-       local MDCFREE2=$(lctl get_param -n mdc.*MDT000$((num -1))-mdc-*.kbytesfree)
+       local MDSFREE2=$(do_facet $facet \
+               lctl get_param -n osd*.*$mdtname.kbytesfree)
+       local MDCFREE2=$(lctl get_param -n mdc.*$mdtname-mdc-*.kbytesfree)
        if [[ $MDCFREE2 -lt $((MDCFREE - 16)) ]]; then
                if [ "$MDSFREE" != "$MDSFREE2" ]; then
                        error "MDC before $MDCFREE != after $MDCFREE2"
@@ -6886,6 +6932,14 @@ test_102q() {
 }
 run_test 102q "flistxattr should not return trusted.link EAs for orphans"
 
+test_102r() {
+       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"
+}
+run_test 102r "set EAs with empty values"
+
 run_acl_subtest()
 {
     $LUSTRE/tests/acl/run $LUSTRE/tests/acl/$1.test
@@ -7317,12 +7371,10 @@ run_test 116a "stripe QOS: free space balance ==================="
 
 test_116b() { # LU-2093
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-       [ -z "$($LCTL get_param -n lo*.$FSNAME-MDT0000-mdtlov.qos_threshold_rr |
-               head -1 2>/dev/null)" ] && skip "no QOS" && return
 #define OBD_FAIL_MDS_OSC_CREATE_FAIL     0x147
-       local old_rr
-       old_rr=$(do_facet $SINGLEMDS lctl get_param -n \
-               lo*.$FSNAME-MDT0000-mdtlov.qos_threshold_rr | head -1)
+       local old_rr=$(do_facet $SINGLEMDS lctl get_param -n \
+                      lo*.$FSNAME-MDT0000-mdtlov.qos_threshold_rr | head -1)
+       [ -z "$old_rr" ] && skip "no QOS" && return 0
        do_facet $SINGLEMDS lctl set_param \
                lo*.$FSNAME-MDT0000-mdtlov.qos_threshold_rr=0
        mkdir -p $DIR/$tdir
@@ -8901,15 +8953,16 @@ som_mode_switch() {
 
 test_132() { #1028, SOM
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
-        remote_mds_nodsh && skip "remote MDS with nodsh" && return
-        local num=$(get_mds_dir $DIR)
-        local mymds=mds${num}
-        local MOUNT_OPTS_SAVE=$MOUNT_OPTS
+       remote_mds_nodsh && skip "remote MDS with nodsh" && return
+       local mdtidx=$($LFS getstripe -M $DIR)
+       local facet=mds$((mdtidx + 1))
 
-        dd if=/dev/zero of=$DIR/$tfile count=1 2>/dev/null
-        cancel_lru_locks osc
+       local MOUNTOPT_SAVE=$MOUNTOPT
 
-        som1=$(do_facet $mymds "$LCTL get_param -n mdt.*.som" | head -n 1)
+       dd if=/dev/zero of=$DIR/$tfile count=1 2>/dev/null
+       cancel_lru_locks osc
+       som1=$(do_facet $facet "$LCTL get_param mdt.*.som" |
+              awk -F= ' {print $2}' | head -n 1)
 
         gl1=$(get_ost_param "ldlm_glimpse_enqueue")
         stat $DIR/$tfile >/dev/null
@@ -8921,7 +8974,8 @@ test_132() { #1028, SOM
         dd if=/dev/zero of=$DIR/$tfile count=1 2>/dev/null
         cancel_lru_locks osc
 
-        som2=$(do_facet $mymds "$LCTL get_param -n mdt.*.som" | head -n 1)
+       som2=$(do_facet $facet "$LCTL get_param mdt.*.som" |
+              awk -F= ' {print $2}' | head -n 1)
         if [ $som1 == $som2 ]; then
             error "som is still "$som2
             if [ x$som2 = x"enabled" ]; then
@@ -9303,10 +9357,10 @@ test_133g() {
                error "find $proc_dirs failed"
 
        [ $(lustre_version_code $SINGLEMDS) -le $(version_code 2.5.54) ] &&
-               skip "Too old lustre on MDS"
+               skip "Too old lustre on MDS" && return
 
        [ $(lustre_version_code ost1) -le $(version_code 2.5.54) ] &&
-               skip "Too old lustre on ost1"
+               skip "Too old lustre on ost1" && return
 
        for facet in $SINGLEMDS ost1; do
                do_facet $facet find $proc_dirs \
@@ -11094,6 +11148,39 @@ test_184d() {
 }
 run_test 184d "allow stripeless layouts swap"
 
+test_184e() {
+       check_swap_layouts_support && return 0
+       [ -z "$(which getfattr 2>/dev/null)" ] &&
+               skip "no getfattr command" && return 0
+
+       local file1=$DIR/$tdir/$tfile-1
+       local file2=$DIR/$tdir/$tfile-2
+       local file3=$DIR/$tdir/$tfile-3
+       local lovea
+
+       mkdir -p $DIR/$tdir
+       touch $file1 || error "create $file1 failed"
+       $OPENFILE -f O_CREAT:O_LOV_DELAY_CREATE $file2 ||
+               error "create $file2 failed"
+       $OPENFILE -f O_CREAT:O_LOV_DELAY_CREATE $file3 ||
+               error "create $file3 failed"
+
+       $LFS swap_layouts $file1 $file2 ||
+               error "swap $file1 $file2 layouts failed"
+
+       lovea=$(getfattr -n trusted.lov $file1 | grep ^trusted)
+       [[ -z "$lovea" ]] || error "$file1 shouldn't have lovea"
+
+       echo 123 > $file1 || error "Should be able to write into $file1"
+
+       $LFS swap_layouts $file1 $file3 ||
+               error "swap $file1 $file3 layouts failed"
+
+       echo 123 > $file1 || error "Should be able to write into $file1"
+
+       rm -rf $file1 $file2 $file3
+}
+run_test 184e "Recreate layout after stripeless layout swaps"
 
 test_185() { # LU-2441
        # LU-3553 - no volatile file support in old servers
@@ -12352,10 +12439,10 @@ test_230b() {
        ln -s $other_dir/$tfile $migrate_dir/${tfile}_ln_other
 
        $LFS mv -v -M $MDTIDX $migrate_dir ||
-                       error "migrate remote dir error"
+               error "migrate remote dir error"
 
        echo "migratate to MDT1, then checking.."
-       for ((i=0; i<10; i++)); do
+       for ((i = 0; i < 10; i++)); do
                for file in $(find $migrate_dir/dir_${i}); do
                        mdt_index=$($LFS getstripe -M $file)
                        [ $mdt_index == $MDTIDX ] ||
@@ -12407,16 +12494,16 @@ test_230b() {
 
        stripe_count=$($LFS getstripe -c $migrate_dir/dir_default_stripe2)
        [ $stripe_count = 2 ] ||
-                       error "dir strpe_count $d != 2 after migration."
+               error "dir strpe_count $d != 2 after migration."
 
        stripe_count=$($LFS getstripe -c $migrate_dir/${tfile}_stripe2)
        [ $stripe_count = 2 ] ||
-                       error "file strpe_count $d != 2 after migration."
+               error "file strpe_count $d != 2 after migration."
 
        #migrate back to MDT0
        MDTIDX=0
        $LFS mv -v -M $MDTIDX $migrate_dir ||
-                       error "migrate remote dir error"
+               error "migrate remote dir error"
 
        echo "migrate back to MDT0, checking.."
        for file in $(find $migrate_dir); do
@@ -12489,10 +12576,10 @@ test_230c() {
        #OBD_FAIL_MIGRATE_ENTRIES       0x1801
        do_facet mds1 lctl set_param fail_loc=0x20001801
        do_facet mds1 lctl  set_param fail_val=5
-       local t=`ls $DIR/$tdir | wc -l`
-       $LFS mv -M $MDTIDX $DIR/$tdir &&
-               error "migrate should failed after 5 entries"
-       local u=`ls $DIR/$tdir | wc -l`
+       local t=$(ls $DIR/$tdir | wc -l)
+       $LFS mv --mdt-index $MDTIDX $DIR/$tdir &&
+               error "migrate should fail after 5 entries"
+       local u=$(ls $DIR/$tdir | wc -l)
        [ "$u" == "$t" ] || error "$u != $t during migration"
 
        for file in $(find $DIR/$tdir); do
@@ -12816,6 +12903,13 @@ test_242() {
 }
 run_test 242 "mdt_readpage failure should not cause directory unreadable"
 
+test_243()
+{
+       test_mkdir -p $DIR/$tdir
+       group_lock_test -d $DIR/$tdir || error "A group lock test failed"
+}
+run_test 243 "various group lock tests"
+
 cleanup_test_300() {
        trap 0
        umask $SAVE_UMASK