X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Ftests%2Fsanity.sh;h=8de017368ccfa994626e3b84f1e975e0273572cd;hp=6b308d09e5e7adb92f0285d748edd1347bc43ad6;hb=f042378fd661bde51f32de2fd400f6afb784f6b9;hpb=785e7dc56613e79bdfd89fab762eeb82deb7564c;ds=sidebyside diff --git a/lustre/tests/sanity.sh b/lustre/tests/sanity.sh index 6b308d0..8de0173 100644 --- a/lustre/tests/sanity.sh +++ b/lustre/tests/sanity.sh @@ -16,23 +16,6 @@ ALWAYS_EXCEPT=" 42a 42b 42c 42d 45 51d 68b $SANITY_EXCE # bug number for skipped tests: LU-2036 ALWAYS_EXCEPT=" 76 $ALWAYS_EXCEPT" -is_sles11() # LU-4351 -{ - if [ -r /etc/SuSE-release ] - then - local vers=`grep VERSION /etc/SuSE-release | awk '{print $3}'` - if [ $vers -eq 11 ] - then - return 0 - fi - fi - return 1 -} - -if is_sles11; then # LU-4351 - ALWAYS_EXCEPT="$ALWAYS_EXCEPT 54c" -fi - SRCDIR=$(cd $(dirname $0); echo $PWD) export PATH=$PATH:/sbin @@ -45,7 +28,6 @@ LFS=${LFS:-lfs} LFIND=${LFIND:-"$LFS find"} LVERIFY=${LVERIFY:-ll_dirstripe_verify} LCTL=${LCTL:-lctl} -MCREATE=${MCREATE:-mcreate} OPENFILE=${OPENFILE:-openfile} OPENUNLINK=${OPENUNLINK:-openunlink} export MULTIOP=${MULTIOP:-multiop} @@ -576,6 +558,7 @@ test_17m() { local i local rc=0 + remote_mds_nodsh && skip "remote MDS with nodsh" && return [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.0) ] && [ $(lustre_version_code $SINGLEMDS) -le $(version_code 2.2.93) ] && skip "MDS 2.2.0-2.2.93 do not NUL-terminate symlinks" && return @@ -620,7 +603,7 @@ test_17m() { stop mds${mds_index} do_facet mds${mds_index} $cmd || rc=$? - start mds${mds_index} $devname $MDS_MOUNT_OPTS + start mds${mds_index} $devname $MDS_MOUNT_OPTS || error "start failed" df $MOUNT > /dev/null 2>&1 [ $rc -ne 0 ] && error "e2fsck should not report error upon "\ "short/long symlink MDT: rc=$rc" @@ -645,7 +628,8 @@ check_fs_consistency_17n() { stop mds${mdt_index} do_facet mds${mdt_index} $cmd || rc=$? - start mds${mdt_index} $devname $MDS_MOUNT_OPTS + start mds${mdt_index} $devname $MDS_MOUNT_OPTS || + error "mount mds${mdt_index} failed" df $MOUNT > /dev/null 2>&1 [ $rc -ne 0 ] && break done @@ -655,6 +639,7 @@ check_fs_consistency_17n() { test_17n() { local i + remote_mds_nodsh && skip "remote MDS with nodsh" && return [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.0) ] && [ $(lustre_version_code $SINGLEMDS) -le $(version_code 2.2.93) ] && skip "MDS 2.2.0-2.2.93 do not NUL-terminate symlinks" && return @@ -707,6 +692,7 @@ test_17n() { run_test 17n "run e2fsck against master/slave MDT which contains remote dir" test_17o() { + remote_mds_nodsh && skip "remote MDS with nodsh" && return [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.3.64) ] && skip "Need MDS version at least 2.3.64" && return @@ -722,7 +708,8 @@ test_17o() { touch $WDIR/$tfile stop mds${mdt_index} - start mds${mdt_index} $mdtdevname $MDS_MOUNT_OPTS + start mds${mdt_index} $mdtdevname $MDS_MOUNT_OPTS || + error "mount mds${mdt_index} failed" #define OBD_FAIL_OSD_LMA_INCOMPAT 0x194 do_facet mds${mdt_index} lctl set_param fail_loc=0x194 @@ -2009,6 +1996,24 @@ test_27C() { #LU-2871 } run_test 27C "check full striping across all OSTs" +test_27D() { + [ $OSTCOUNT -lt 2 ] && skip "needs >= 2 OSTs" && return + local POOL=${POOL:-testpool} + local first_ost=0 + local last_ost=$(($OSTCOUNT - 1)) + local ost_step=1 + local ost_list=$(seq $first_ost $ost_step $last_ost) + local ost_range="$first_ost $last_ost $ost_step" + + 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 || + error "llapi_layout_test failed" + cleanup_pools || error "cleanup_pools failed" +} +run_test 27D "validate llapi_layout API" + # createtest also checks that device nodes are created and # then visible correctly (#2091) test_28() { # bug 2091 @@ -2561,9 +2566,9 @@ test_33b() { rm -fr $DIR/d33 test_mkdir -p $DIR/d33 chown $RUNAS_ID $DIR/d33 - $RUNAS $OPENFILE -f 1286739555 $DIR/d33/f33 && error "create" || true + $RUNAS $OPENFILE -f 1286739555 $DIR/d33/f33 } -run_test 33b "test open file with malformed flags (No panic and return error)" +run_test 33b "test open file with malformed flags (No panic)" test_33c() { [ $PARALLEL == "yes" ] && skip "skip parallel run" && return @@ -5914,6 +5919,7 @@ test_79() { # bug 12743 run_test 79 "df report consistency check =======================" test_80() { # bug 10718 + remote_ost_nodsh && skip "remote OST with nodsh" && return [ $PARALLEL == "yes" ] && skip "skip parallel run" && return # relax strong synchronous semantics for slow backends like ZFS local soc="obdfilter.*.sync_on_lock_cancel" @@ -6840,7 +6846,7 @@ run_acl_subtest() return $? } -test_103 () { +test_103a() { [ "$UID" != 0 ] && skip_env "must run as root" && return [ -z "$(lctl get_param -n mdc.*-mdc-*.connect_flags | grep acl)" ] && skip "must have acl enabled" && return @@ -6901,7 +6907,55 @@ test_103 () { fi done } -run_test 103 "acl test =========================================" +run_test 103a "acl test =========================================" + +test_103b() { + local noacl=false + local MDT_DEV=$(mdsdevname ${SINGLEMDS//mds/}) + local mountopts=$MDS_MOUNT_OPTS + + if [[ "$MDS_MOUNT_OPTS" =~ "noacl" ]]; then + noacl=true + else + # stop the MDT + stop $SINGLEMDS || error "failed to stop MDT." + # remount the MDT + if [ -z "$MDS_MOUNT_OPTS" ]; then + MDS_MOUNT_OPTS="-o noacl" + else + MDS_MOUNT_OPTS="${MDS_MOUNT_OPTS},noacl" + fi + start $SINGLEMDS $MDT_DEV $MDS_MOUNT_OPTS || + error "failed to start MDT." + MDS_MOUNT_OPTS=$mountopts + fi + + touch $DIR/$tfile + setfacl -m u:bin:rw $DIR/$tfile && error "setfacl should fail" + + if ! $noacl; then + # stop the MDT + stop $SINGLEMDS || error "failed to stop MDT." + # remount the MDT + start $SINGLEMDS $MDT_DEV $MDS_MOUNT_OPTS || + error "failed to start MDT." + fi + + true +} +run_test 103b "MDS mount option 'noacl'" + +test_103c() { + mkdir -p $DIR/$tdir + cp -rp $DIR/$tdir $DIR/$tdir.bak + + [ -n "$(getfattr -d -m. $DIR/$tdir | grep posix_acl_default)" ] && + error "$DIR/$tdir shouldn't contain default ACL" + [ -n "$(getfattr -d -m. $DIR/$tdir.bak | grep posix_acl_default)" ] && + error "$DIR/$tdir.bak shouldn't contain default ACL" + true +} +run_test 103c "'cp -rp' won't set empty acl" test_104a() { [ $PARALLEL == "yes" ] && skip "skip parallel run" && return @@ -8776,11 +8830,12 @@ som_mode_switch() { if [ x$som = x"enabled" ]; then [ $((gl2 - gl1)) -gt 0 ] && error "no glimpse RPC is expected" - MOUNTOPT=`echo $MOUNTOPT | sed 's/som_preview//g'` + MOUNT_OPTS=`echo $MOUNT_OPTS | + sed 's/som_preview,\|,som_preview\|som_preview//g'` do_facet mgs "$LCTL conf_param $FSNAME.mdt.som=disabled" else [ $((gl2 - gl1)) -gt 0 ] || error "some glimpse RPC is expected" - MOUNTOPT="$MOUNTOPT,som_preview" + MOUNT_OPTS="${MOUNT_OPTS:+$MOUNT_OPTS,}som_preview" do_facet mgs "$LCTL conf_param $FSNAME.mdt.som=enabled" fi @@ -8796,12 +8851,12 @@ 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 + local MOUNT_OPTS_SAVE=$MOUNT_OPTS dd if=/dev/zero of=$DIR/$tfile count=1 2>/dev/null cancel_lru_locks osc - som1=$(do_facet $mymds "$LCTL get_param mdt.*.som" | awk -F= ' {print $2}' | head -n 1) + som1=$(do_facet $mymds "$LCTL get_param -n mdt.*.som" | head -n 1) gl1=$(get_ost_param "ldlm_glimpse_enqueue") stat $DIR/$tfile >/dev/null @@ -8813,7 +8868,7 @@ 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 mdt.*.som" | awk -F= ' {print $2}' | head -n 1) + som2=$(do_facet $mymds "$LCTL get_param -n mdt.*.som" | head -n 1) if [ $som1 == $som2 ]; then error "som is still "$som2 if [ x$som2 = x"enabled" ]; then @@ -8828,7 +8883,7 @@ test_132() { #1028, SOM gl2=$(get_ost_param "ldlm_glimpse_enqueue") echo "====> SOM is "$som2", "$((gl2 - gl1))" glimpse RPC occured" som_mode_switch $som2 $gl1 $gl2 - MOUNTOPT=$MOUNTOPT_SAVE + MOUNT_OPTS=$MOUNT_OPTS_SAVE } run_test 132 "som avoids glimpse rpc" @@ -9088,11 +9143,12 @@ test_133d() { run_test 133d "Verifying rename_stats ========================================" test_133e() { + remote_mds_nodsh && skip "remote MDS with nodsh" && return + remote_ost_nodsh && skip "remote OST with nodsh" && return [ $PARALLEL == "yes" ] && skip "skip parallel run" && return local testdir=$DIR/${tdir}/stats_testdir local ctr f0 f1 bs=32768 count=42 sum - remote_ost_nodsh && skip "remote OST with nodsh" && return mkdir -p ${testdir} || error "mkdir failed" $SETSTRIPE -c 1 -i 0 ${testdir}/${tfile} @@ -9133,9 +9189,21 @@ test_133e() { run_test 133e "Verifying OST {read,write}_bytes nid stats =================" test_133f() { - local proc_dirs="/proc/fs/lustre/ /proc/sys/lnet/ /proc/sys/lustre/" + local proc_dirs + + local dirs="/proc/fs/lustre/ /proc/sys/lnet/ /proc/sys/lustre/ \ +/sys/fs/lustre/ /sys/fs/lnet/" + local dir + for dir in $dirs; do + if [ -d $dir ]; then + proc_dirs="$proc_dirs $dir" + fi + done + local facet + remote_mds_nodsh && skip "remote MDS with nodsh" && return + remote_ost_nodsh && skip "remote OST with nodsh" && return # First without trusting modes. find $proc_dirs -exec cat '{}' \; &> /dev/null @@ -9160,7 +9228,17 @@ test_133f() { run_test 133f "Check for LBUGs/Oopses/unreadable files in /proc" test_133g() { - local proc_dirs="/proc/fs/lustre/ /proc/sys/lnet/ /proc/sys/lustre/" + local proc_dirs + + local dirs="/proc/fs/lustre/ /proc/sys/lnet/ /proc/sys/lustre/ \ +/sys/fs/lustre/ /sys/fs/lnet/" + local dir + for dir in $dirs; do + if [ -d $dir ]; then + proc_dirs="$proc_dirs $dir" + fi + done + local facet # Second verifying readability. @@ -9281,14 +9359,14 @@ function roc_hit_init() { dd if=/dev/urandom of=$file bs=4k count=4 2>&1 > /dev/null idx=$(printf %04x $i) BEFORE=$(get_osd_param $list *OST*$idx stats | - awk '$1 == "cache_access" {sum += $2} + awk '$1 == "cache_access" {sum += $7} END { printf("%0.0f", sum) }') cancel_lru_locks osc cat $file >/dev/null AFTER=$(get_osd_param $list *OST*$idx stats | - awk '$1 == "cache_access" {sum += $2} + awk '$1 == "cache_access" {sum += $7} END { printf("%0.0f", sum) }') echo BEFORE:$BEFORE AFTER:$AFTER @@ -9305,7 +9383,7 @@ function roc_hit_init() { function roc_hit() { local list=$(comma_list $(osts_nodes)) echo $(get_osd_param $list '' stats | - awk '$1 == "cache_hit" {sum += $2} + awk '$1 == "cache_hit" {sum += $7} END { printf("%0.0f", sum) }') } @@ -9524,9 +9602,13 @@ dot_lustre_fid_permission_check() { $OPENFILE -f O_LOV_DELAY_CREATE:O_CREAT $test_dir/$tfile-2 fid=$($LFS path2fid $test_dir/$tfile-2) - echo "cp /etc/passwd $MOUNT/.lustre/fid/$fid" - cp /etc/passwd $MOUNT/.lustre/fid/$fid && - error "create lov data thru .lustre should fail." + + if [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.6.50) ] + then # LU-5424 + echo "cp /etc/passwd $MOUNT/.lustre/fid/$fid" + cp /etc/passwd $MOUNT/.lustre/fid/$fid || + error "create lov data thru .lustre failed" + fi echo "cp /etc/passwd $test_dir/$tfile-2" cp /etc/passwd $test_dir/$tfile-2 || error "copy to $test_dir/$tfile-2 failed." @@ -9595,7 +9677,7 @@ test_154b() { local rc=0 mkdir -p $DIR/$tdir - $LFS mkdir -i $MDTIDX -c $MDSCOUNT $remote_dir || + $LFS mkdir -i $MDTIDX $remote_dir || error "create remote directory failed" cp /etc/hosts $remote_dir/$tfile @@ -9670,6 +9752,17 @@ test_154d() { } run_test 154d "Verify open file fid" +test_154e() +{ + [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.6.50) ]] && + skip "Need MDS version at least 2.6.50" && return + + if ls -a $MOUNT | grep -q '^\.lustre$'; then + error ".lustre returned by readdir" + fi +} +run_test 154e ".lustre is not returned by readdir" + test_155_small_load() { local temp=$TMP/$tfile local file=$DIR/$tfile @@ -9791,6 +9884,7 @@ test_155h() { run_test 155h "Verify big file correctness: read cache:off write_cache:off" test_156() { + remote_ost_nodsh && skip "remote OST with nodsh" && return [ $PARALLEL == "yes" ] && skip "skip parallel run" && return local CPAGES=3 local BEFORE @@ -10225,6 +10319,7 @@ test_161b() { run_test 161b "link ea sanity under remote directory" test_161c() { + remote_mds_nodsh && skip "remote MDS with nodsh" && return [ $PARALLEL == "yes" ] && skip "skip parallel run" && return [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.1.5) ]] && skip "Need MDS version at least 2.1.5" && return @@ -10340,25 +10435,30 @@ test_162() { test_mkdir -p -c1 $DIR/$tdir/d2/p/q/r # regular file FID=$($LFS path2fid $DIR/$tdir/d2/$tfile | tr -d '[]') - check_path "$tdir/d2/$tfile" $FSNAME $FID --link 0 + check_path "$tdir/d2/$tfile" $FSNAME $FID --link 0 || + error "check path $tdir/d2/$tfile failed" # softlink ln -s $DIR/$tdir/d2/$tfile $DIR/$tdir/d2/p/q/r/slink FID=$($LFS path2fid $DIR/$tdir/d2/p/q/r/slink | tr -d '[]') - check_path "$tdir/d2/p/q/r/slink" $FSNAME $FID --link 0 + check_path "$tdir/d2/p/q/r/slink" $FSNAME $FID --link 0 || + error "check path $tdir/d2/p/q/r/slink failed" # softlink to wrong file ln -s /this/is/garbage $DIR/$tdir/d2/p/q/r/slink.wrong FID=$($LFS path2fid $DIR/$tdir/d2/p/q/r/slink.wrong | tr -d '[]') - check_path "$tdir/d2/p/q/r/slink.wrong" $FSNAME $FID --link 0 + check_path "$tdir/d2/p/q/r/slink.wrong" $FSNAME $FID --link 0 || + error "check path $tdir/d2/p/q/r/slink.wrong failed" # hardlink ln $DIR/$tdir/d2/$tfile $DIR/$tdir/d2/p/q/r/hlink mv $DIR/$tdir/d2/$tfile $DIR/$tdir/d2/a/b/c/new_file FID=$($LFS path2fid $DIR/$tdir/d2/a/b/c/new_file | tr -d '[]') # fid2path dir/fsname should both work - check_path "$tdir/d2/a/b/c/new_file" $FSNAME $FID --link 1 - check_path "$DIR/$tdir/d2/p/q/r/hlink" $DIR $FID --link 0 + check_path "$tdir/d2/a/b/c/new_file" $FSNAME $FID --link 1 || + error "check path $tdir/d2/a/b/c/new_file failed" + check_path "$DIR/$tdir/d2/p/q/r/hlink" $DIR $FID --link 0 || + error "check path $DIR/$tdir/d2/p/q/r/hlink failed" # hardlink count: check that there are 2 links # Doesnt work with CMD yet: 17935 @@ -10367,7 +10467,8 @@ test_162() { # hardlink indexing: remove the first link rm $DIR/$tdir/d2/p/q/r/hlink - check_path "$tdir/d2/a/b/c/new_file" $FSNAME $FID --link 0 + check_path "$tdir/d2/a/b/c/new_file" $FSNAME $FID --link 0 || + error "check path $DIR/$tdir/d2/a/b/c/new_file failed" return 0 } @@ -10392,11 +10493,13 @@ test_162b() { for ((i=0;i<5;i++)); do FID=$($LFS path2fid $DIR/$tdir/striped_dir/f$i | tr -d '[]') || error "get fid for f$i failed" - check_path "$tdir/striped_dir/f$i" $FSNAME $FID --link 0 + check_path "$tdir/striped_dir/f$i" $FSNAME $FID --link 0 || + error "check path $tdir/striped_dir/f$i failed" FID=$($LFS path2fid $DIR/$tdir/striped_dir/d$i | tr -d '[]') || error "get fid for d$i failed" - check_path "$tdir/striped_dir/d$i" $FSNAME $FID --link 0 + check_path "$tdir/striped_dir/d$i" $FSNAME $FID --link 0 || + error "check path $tdir/striped_dir/d$i failed" done return 0 @@ -10493,7 +10596,7 @@ test_171() { # bug20592 } run_test 171 "test libcfs_debug_dumplog_thread stuck in do_exit() ======" -# it would be good to share it with obdfilter-survey/libecho code +# it would be good to share it with obdfilter-survey/iokit-libecho code setup_obdecho_osc () { local rc=0 local ost_nid=$1 @@ -10597,6 +10700,7 @@ run_test 180b "test obdecho directly on obdfilter" test_180c() { # LU-2598 [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + remote_ost_nodsh && skip "remote OST with nodsh" && return [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.4.0) ]] && skip "Need MDS version at least 2.4.0" && return @@ -10668,6 +10772,7 @@ test_182() { run_test 182 "Disable MDC RPCs semaphore wouldn't crash client ================" test_183() { # LU-2275 + remote_mds_nodsh && skip "remote MDS with nodsh" && return [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.3.56) ]] && skip "Need MDS version at least 2.3.56" && return @@ -10897,251 +11002,6 @@ test_187b() { } run_test 187b "Test data version change on volatile file" -# OST pools tests -check_file_in_pool() -{ - local file=$1 - local pool=$2 - local tlist="$3" - local res=$($GETSTRIPE $file | grep 0x | cut -f2) - for i in $res - do - for t in $tlist ; do - [ "$i" -eq "$t" ] && continue 2 - done - - echo "pool list: $tlist" - echo "striping: $res" - error_noexit "$file not allocated in $pool" - return 1 - done - return 0 -} - -pool_add() { - echo "Creating new pool" - local pool=$1 - - create_pool $FSNAME.$pool || - { error_noexit "No pool created, result code $?"; return 1; } - [ $($LFS pool_list $FSNAME | grep -c $pool) -eq 1 ] || - { error_noexit "$pool not in lfs pool_list"; return 2; } -} - -pool_add_targets() { - echo "Adding targets to pool" - local pool=$1 - local first=$2 - local last=$3 - local step=${4:-1} - - local list=$(seq $first $step $last) - - local t=$(for i in $list; do printf "$FSNAME-OST%04x_UUID " $i; done) - do_facet mgs $LCTL pool_add \ - $FSNAME.$pool $FSNAME-OST[$first-$last/$step] - wait_update $HOSTNAME "lctl get_param -n lov.$FSNAME-*.pools.$pool \ - | sort -u | tr '\n' ' ' " "$t" || { - error_noexit "Add to pool failed" - return 1 - } - local lfscount=$($LFS pool_list $FSNAME.$pool | grep -c "\-OST") - local addcount=$(((last - first) / step + 1)) - [ $lfscount -eq $addcount ] || { - error_noexit "lfs pool_list bad ost count" \ - "$lfscount != $addcount" - return 2 - } -} - -pool_set_dir() { - local pool=$1 - local tdir=$2 - echo "Setting pool on directory $tdir" - - $SETSTRIPE -c 2 -p $pool $tdir && return 0 - - error_noexit "Cannot set pool $pool to $tdir" - return 1 -} - -pool_check_dir() { - local pool=$1 - local tdir=$2 - echo "Checking pool on directory $tdir" - - local res=$($GETSTRIPE --pool $tdir | sed "s/\s*$//") - [ "$res" = "$pool" ] && return 0 - - error_noexit "Pool on '$tdir' is '$res', not '$pool'" - return 1 -} - -pool_dir_rel_path() { - echo "Testing relative path works well" - local pool=$1 - local tdir=$2 - local root=$3 - - mkdir -p $root/$tdir/$tdir - cd $root/$tdir - pool_set_dir $pool $tdir || return 1 - pool_set_dir $pool ./$tdir || return 2 - pool_set_dir $pool ../$tdir || return 3 - pool_set_dir $pool ../$tdir/$tdir || return 4 - rm -rf $tdir; cd - > /dev/null -} - -pool_alloc_files() { - echo "Checking files allocation from directory pool" - local pool=$1 - local tdir=$2 - local count=$3 - local tlist="$4" - - local failed=0 - for i in $(seq -w 1 $count) - do - local file=$tdir/file-$i - touch $file - check_file_in_pool $file $pool "$tlist" || \ - failed=$((failed + 1)) - done - [ "$failed" = 0 ] && return 0 - - error_noexit "$failed files not allocated in $pool" - return 1 -} - -pool_create_files() { - echo "Creating files in pool" - local pool=$1 - local tdir=$2 - local count=$3 - local tlist="$4" - - mkdir -p $tdir - local failed=0 - for i in $(seq -w 1 $count) - do - local file=$tdir/spoo-$i - $SETSTRIPE -p $pool $file - check_file_in_pool $file $pool "$tlist" || \ - failed=$((failed + 1)) - done - [ "$failed" = 0 ] && return 0 - - error_noexit "$failed files not allocated in $pool" - return 1 -} - -pool_lfs_df() { - echo "Checking 'lfs df' output" - local pool=$1 - - local t=$($LCTL get_param -n lov.$FSNAME-clilov-*.pools.$pool | - tr '\n' ' ') - local res=$($LFS df --pool $FSNAME.$pool | - awk '{print $1}' | - grep "$FSNAME-OST" | - tr '\n' ' ') - [ "$res" = "$t" ] && return 0 - - error_noexit "Pools OSTs '$t' is not '$res' that lfs df reports" - return 1 -} - -pool_file_rel_path() { - echo "Creating files in a pool with relative pathname" - local pool=$1 - local tdir=$2 - - mkdir -p $tdir || - { error_noexit "unable to create $tdir"; return 1 ; } - local file="/..$tdir/$tfile-1" - $SETSTRIPE -p $pool $file || - { error_noexit "unable to create $file" ; return 2 ; } - - cd $tdir - $SETSTRIPE -p $pool $tfile-2 || { - error_noexit "unable to create $tfile-2 in $tdir" - return 3 - } -} - -pool_remove_first_target() { - echo "Removing first target from a pool" - local pool=$1 - - local pname="lov.$FSNAME-*.pools.$pool" - local t=$($LCTL get_param -n $pname | head -n1) - do_facet mgs $LCTL pool_remove $FSNAME.$pool $t - wait_update $HOSTNAME "lctl get_param -n $pname | grep $t" "" || { - error_noexit "$t not removed from $FSNAME.$pool" - return 1 - } -} - -pool_remove_all_targets() { - echo "Removing all targets from pool" - local pool=$1 - local file=$2 - local pname="lov.$FSNAME-*.pools.$pool" - for t in $($LCTL get_param -n $pname | sort -u) - do - do_facet mgs $LCTL pool_remove $FSNAME.$pool $t - done - wait_update $HOSTNAME "lctl get_param -n $pname" "" || { - error_noexit "Pool $FSNAME.$pool cannot be drained" - return 1 - } - # striping on an empty/nonexistant pool should fall back - # to "pool of everything" - touch $file || { - error_noexit "failed to use fallback striping for empty pool" - return 2 - } - # setstripe on an empty pool should fail - $SETSTRIPE -p $pool $file 2>/dev/null && { - error_noexit "expected failure when creating file" \ - "with empty pool" - return 3 - } - return 0 -} - -pool_remove() { - echo "Destroying pool" - local pool=$1 - local file=$2 - - do_facet mgs $LCTL pool_destroy $FSNAME.$pool - - sleep 2 - # striping on an empty/nonexistant pool should fall back - # to "pool of everything" - touch $file || { - error_noexit "failed to use fallback striping for missing pool" - return 1 - } - # setstripe on an empty pool should fail - $SETSTRIPE -p $pool $file 2>/dev/null && { - error_noexit "expected failure when creating file" \ - "with missing pool" - return 2 - } - - # get param should return err once pool is gone - if wait_update $HOSTNAME "lctl get_param -n \ - lov.$FSNAME-*.pools.$pool 2>/dev/null || echo foo" "foo" - then - remove_pool_from_list $FSNAME.$pool - return 0 - fi - error_noexit "Pool $FSNAME.$pool is not destroyed" - return 3 -} - test_200() { [ $PARALLEL == "yes" ] && skip "skip parallel run" && return remote_mgs_nodsh && skip "remote MGS with nodsh" && return @@ -11364,6 +11224,7 @@ jobstats_set() { test_205() { # Job stats [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + remote_mgs_nodsh && skip "remote MGS with nodsh" && return [ -z "$(lctl get_param -n mdc.*.connect_flags | grep jobstats)" ] && skip "Server doesn't support jobstats" && return 0 [[ $JOBID_VAR = disable ]] && skip "jobstats is disabled" && return @@ -11466,6 +11327,7 @@ test_208() { [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.4.52) ]] || { skip "Need MDS version at least 2.4.52"; return 0; } + remote_mds_nodsh && skip "remote MDS with nodsh" && return echo "==== test 1: verify get lease work" $MULTIOP $DIR/$tfile oO_CREAT:O_RDWR:eRE+eU || error "get lease error" @@ -11571,7 +11433,7 @@ run_test 214 "hash-indexed directory test - bug 20133" # having "abc" as 1st arg, creates $TMP/lnet_abc.out and $TMP/lnet_abc.sys create_lnet_proc_files() { - cat /proc/sys/lnet/$1 >$TMP/lnet_$1.out || error "cannot read /proc/sys/lnet/$1" + lctl get_param -n $1 >$TMP/lnet_$1.out || error "cannot read lnet.$1" sysctl lnet.$1 >$TMP/lnet_$1.sys_tmp || error "cannot read lnet.$1" sed "s/^lnet.$1\ =\ //g" "$TMP/lnet_$1.sys_tmp" >$TMP/lnet_$1.sys @@ -11627,14 +11489,13 @@ test_215() { # for bugs 18102, 21079, 21517 local L2 # regexp for 2nd line (optional) local BR # regexp for the rest (body) - # /proc/sys/lnet/stats should look as 11 space-separated non-negative numerics + # lnet.stats should look as 11 space-separated non-negative numerics BR="^$N $N $N $N $N $N $N $N $N $N $N$" create_lnet_proc_files "stats" - check_lnet_proc_stats "stats.out" "/proc/sys/lnet/stats" "$BR" check_lnet_proc_stats "stats.sys" "lnet.stats" "$BR" remove_lnet_proc_files "stats" - # /proc/sys/lnet/routes should look like this: + # lnet.routes should look like this: # Routing disabled/enabled # net hops priority state router # where net is a string like tcp0, hops > 0, priority >= 0, @@ -11644,11 +11505,10 @@ test_215() { # for bugs 18102, 21079, 21517 L2="^net +hops +priority +state +router$" BR="^$NET +$N +(0|1) +(up|down) +$NID$" create_lnet_proc_files "routes" - check_lnet_proc_entry "routes.out" "/proc/sys/lnet/routes" "$BR" "$L1" "$L2" check_lnet_proc_entry "routes.sys" "lnet.routes" "$BR" "$L1" "$L2" remove_lnet_proc_files "routes" - # /proc/sys/lnet/routers should look like this: + # lnet.routers should look like this: # ref rtr_ref alive_cnt state last_ping ping_sent deadline down_ni router # where ref > 0, rtr_ref > 0, alive_cnt >= 0, state is up/down, # last_ping >= 0, ping_sent is boolean (0/1), deadline and down_ni are @@ -11656,11 +11516,10 @@ test_215() { # for bugs 18102, 21079, 21517 L1="^ref +rtr_ref +alive_cnt +state +last_ping +ping_sent +deadline +down_ni +router$" BR="^$P +$P +$N +(up|down) +$N +(0|1) +$I +$I +$NID$" create_lnet_proc_files "routers" - check_lnet_proc_entry "routers.out" "/proc/sys/lnet/routers" "$BR" "$L1" check_lnet_proc_entry "routers.sys" "lnet.routers" "$BR" "$L1" remove_lnet_proc_files "routers" - # /proc/sys/lnet/peers should look like this: + # lnet.peers should look like this: # nid refs state last max rtr min tx min queue # where nid is a string like 192.168.1.1@tcp2, refs > 0, # state is up/down/NA, max >= 0. last, rtr, min, tx, min are @@ -11668,21 +11527,19 @@ test_215() { # for bugs 18102, 21079, 21517 L1="^nid +refs +state +last +max +rtr +min +tx +min +queue$" BR="^$NID +$P +(up|down|NA) +$I +$N +$I +$I +$I +$I +$N$" create_lnet_proc_files "peers" - check_lnet_proc_entry "peers.out" "/proc/sys/lnet/peers" "$BR" "$L1" check_lnet_proc_entry "peers.sys" "lnet.peers" "$BR" "$L1" remove_lnet_proc_files "peers" - # /proc/sys/lnet/buffers should look like this: + # lnet.buffers should look like this: # pages count credits min # where pages >=0, count >=0, credits and min are numeric (0 or >0 or <0) L1="^pages +count +credits +min$" BR="^ +$N +$N +$I +$I$" create_lnet_proc_files "buffers" - check_lnet_proc_entry "buffers.out" "/proc/sys/lnet/buffers" "$BR" "$L1" check_lnet_proc_entry "buffers.sys" "lnet.buffers" "$BR" "$L1" remove_lnet_proc_files "buffers" - # /proc/sys/lnet/nis should look like this: + # lnet.nis should look like this: # nid status alive refs peer rtr max tx min # where nid is a string like 192.168.1.1@tcp2, status is up/down, # alive is numeric (0 or >0 or <0), refs >= 0, peer >= 0, @@ -11690,15 +11547,14 @@ test_215() { # for bugs 18102, 21079, 21517 L1="^nid +status +alive +refs +peer +rtr +max +tx +min$" BR="^$NID +(up|down) +$I +$N +$N +$N +$N +$I +$I$" create_lnet_proc_files "nis" - check_lnet_proc_entry "nis.out" "/proc/sys/lnet/nis" "$BR" "$L1" check_lnet_proc_entry "nis.sys" "lnet.nis" "$BR" "$L1" remove_lnet_proc_files "nis" - # can we successfully write to /proc/sys/lnet/stats? - echo "0" >/proc/sys/lnet/stats || error "cannot write to /proc/sys/lnet/stats" + # can we successfully write to lnet.stats? + lctl set_param -n stats=0 || error "cannot write to lnet.stats" sysctl -w lnet.stats=0 || error "cannot write to lnet.stats" } -run_test 215 "/proc/sys/lnet exists and has proper content - bugs 18102, 21079, 21517" +run_test 215 "lnet exists and has proper content - bugs 18102, 21079, 21517" test_216() { # bug 20317 [ $PARALLEL == "yes" ] && skip "skip parallel run" && return @@ -12077,6 +11933,7 @@ run_test 227 "running truncated executable does not cause OOM" # LU-1512 try to reuse idle OI blocks test_228a() { [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + remote_mds_nodsh && skip "remote MDS with nodsh" && return [ "$(facet_fstype $SINGLEMDS)" != "ldiskfs" ] && skip "non-ldiskfs backend" && return @@ -12118,6 +11975,7 @@ run_test 228a "try to reuse idle OI blocks" test_228b() { [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + remote_mds_nodsh && skip "remote MDS with nodsh" && return [ "$(facet_fstype $SINGLEMDS)" != "ldiskfs" ] && skip "non-ldiskfs backend" && return @@ -12167,6 +12025,7 @@ run_test 228b "idle OI blocks can be reused after MDT restart" #LU-1881 test_228c() { [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + remote_mds_nodsh && skip "remote MDS with nodsh" && return [ "$(facet_fstype $SINGLEMDS)" != "ldiskfs" ] && skip "non-ldiskfs backend" && return @@ -12665,7 +12524,8 @@ run_test 236 "Layout swap on open unlinked file" # The new system calls are supported in glibc >= 2.14. test_237() { - echo "Test file_handle syscalls" > $DIR/$tfile + echo "Test file_handle syscalls" > $DIR/$tfile || + error "write failed" check_fhandle_syscalls $DIR/$tfile || error "check_fhandle_syscalls failed" } @@ -12708,6 +12568,51 @@ test_239() { } run_test 239 "osp_sync test" +test_240() { + [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return + + mkdir -p $DIR/$tdir + + $LFS mkdir -i 0 $DIR/$tdir/d0 || + error "failed to mkdir $DIR/$tdir/d0 on MDT0" + $LFS mkdir -i 1 $DIR/$tdir/d0/d1 || + error "failed to mkdir $DIR/$tdir/d0/d1 on MDT1" + + umount_client $MOUNT || error "umount failed" + #define OBD_FAIL_TGT_DELAY_CONDITIONAL 0x713 + do_facet mds2 lctl set_param fail_loc=0x713 fail_val=1 + mount_client $MOUNT || error "failed to mount client" + + echo "stat $DIR/$tdir/d0/d1, should not fail/ASSERT" + stat $DIR/$tdir/d0/d1 || error "fail to stat $DIR/$tdir/d0/d1" +} +run_test 240 "race between ldlm enqueue and the connection RPC (no ASSERT)" + +test_241_bio() { + for LOOP in $(seq $1); do + dd if=$DIR/$tfile of=/dev/null bs=40960 count=1 2>/dev/null + cancel_lru_locks osc + done +} + +test_241_dio() { + for LOOP in $(seq $1); do + dd if=$DIR/$tfile of=/dev/null bs=40960 count=1 \ + iflag=direct 2>/dev/null + done +} + +test_241() { + dd if=/dev/zero of=$DIR/$tfile count=1 bs=40960 + ls -la $DIR/$tfile + cancel_lru_locks osc + test_241_bio 1000 & + PID=$! + test_241_dio 1000 + wait $PID +} +run_test 241 "bio vs dio" + cleanup_test_300() { trap 0 umask $SAVE_UMASK @@ -13001,6 +12906,46 @@ test_300g() { } run_test 300g "check default striped directory for striped directory" +test_300h() { + [ $PARALLEL == "yes" ] && skip "skip parallel run" && return + [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return + local stripe_count + local file + + mkdir $DIR/$tdir + + $LFS setdirstripe -i 0 -c$MDSCOUNT -t all_char $DIR/$tdir/striped_dir || + error "set striped dir error" + + createmany -o $DIR/$tdir/striped_dir/f- 10 || + error "create files under striped dir failed" + + # unfortunately, we need to umount to clear dir layout cache for now + # once we fully implement dir layout, we can drop this + umount_client $MOUNT || error "umount failed" + mount_client $MOUNT || error "mount failed" + + #set the stripe to be unknown hash type + #define OBD_FAIL_UNKNOWN_LMV_STRIPE 0x1901 + $LCTL set_param fail_loc=0x1901 + for ((i = 0; i < 10; i++)); do + $CHECKSTAT -t file $DIR/$tdir/striped_dir/f-$i || + error "stat f-$i failed" + rm $DIR/$tdir/striped_dir/f-$i || error "unlink f-$i failed" + done + + touch $DIR/$tdir/striped_dir/f0 && + error "create under striped dir with unknown hash should fail" + + $LCTL set_param fail_loc=0 + + umount_client $MOUNT || error "umount failed" + mount_client $MOUNT || error "mount failed" + + return 0 +} +run_test 300h "client handle unknown hash type striped directory" + test_400a() { # LU-1606, was conf-sanity test_74 local extra_flags='' local out=$TMP/$tfile @@ -13067,10 +13012,9 @@ test_900() { local ls #define OBD_FAIL_MGC_PAUSE_PROCESS_LOG 0x903 $LCTL set_param fail_loc=0x903 - # cancel_lru_locks mgc - does not work due to lctl set_param syntax - for ls in /proc/fs/lustre/ldlm/namespaces/MGC*/lru_size; do - echo "clear" > $ls - done + + cancel_lru_locks MGC + FAIL_ON_ERROR=true cleanup FAIL_ON_ERROR=true setup }