X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Ftests%2Fsanity.sh;h=2244d5aaf801330337ec8763ef8e204937780091;hp=a191b7176b89765f527c4b10afbdcb7ad92f72d3;hb=3e2d4d2d7477dd338a87de103027d37865285e44;hpb=7d7bb7a4fc0cd6f22ad08261ea138d7d93e433c2 diff --git a/lustre/tests/sanity.sh b/lustre/tests/sanity.sh index a191b71..2244d5a 100644 --- a/lustre/tests/sanity.sh +++ b/lustre/tests/sanity.sh @@ -139,105 +139,82 @@ echo # add a newline after mke2fs. umask 077 -OLDDEBUG="`lctl get_param -n debug 2> /dev/null`" +OLDDEBUG=$(lctl get_param -n debug 2> /dev/null) lctl set_param debug=-1 2> /dev/null || true test_0() { touch $DIR/$tfile - $CHECKSTAT -t file $DIR/$tfile || error + $CHECKSTAT -t file $DIR/$tfile || error "$tfile is not a file" rm $DIR/$tfile - $CHECKSTAT -a $DIR/$tfile || error + $CHECKSTAT -a $DIR/$tfile || error "$tfile was not removed" } run_test 0 "touch .../$tfile ; rm .../$tfile =====================" test_0b() { - chmod 0755 $DIR || error - $CHECKSTAT -p 0755 $DIR || error + chmod 0755 $DIR || error "chmod 0755 $DIR failed" + $CHECKSTAT -p 0755 $DIR || error "$DIR permission is not 0755" } run_test 0b "chmod 0755 $DIR =============================" test_0c() { - $LCTL get_param mdc.*.import | grep "state: FULL" || error "import not FULL" - $LCTL get_param mdc.*.import | grep "target: $FSNAME-MDT" || error "bad target" + $LCTL get_param mdc.*.import | grep "state: FULL" || + error "import not FULL" + $LCTL get_param mdc.*.import | grep "target: $FSNAME-MDT" || + error "bad target" } run_test 0c "check import proc =============================" -test_1a() { - test_mkdir -p $DIR/$tdir - test_mkdir -p $DIR/$tdir/d2 +test_1() { + test_mkdir -p $DIR/$tdir || error "mkdir $tdir failed" + test_mkdir -p $DIR/$tdir/d2 || error "mkdir $tdir/d2 failed" test_mkdir $DIR/$tdir/d2 && error "we expect EEXIST, but not returned" - $CHECKSTAT -t dir $DIR/$tdir/d2 || error -} -run_test 1a "mkdir .../d1; mkdir .../d1/d2 =====================" - -test_1b() { + $CHECKSTAT -t dir $DIR/$tdir/d2 || error "$tdir/d2 is not a dir" rmdir $DIR/$tdir/d2 rmdir $DIR/$tdir - $CHECKSTAT -a $DIR/$tdir || error + $CHECKSTAT -a $DIR/$tdir || error "$tdir was not removed" } -run_test 1b "rmdir .../d1/d2; rmdir .../d1 =====================" +run_test 1 "mkdir; remkdir; rmdir ==============================" -test_2a() { - test_mkdir $DIR/$tdir - touch $DIR/$tdir/$tfile - $CHECKSTAT -t file $DIR/$tdir/$tfile || error -} -run_test 2a "mkdir .../d2; touch .../d2/f ======================" - -test_2b() { +test_2() { + test_mkdir -p $DIR/$tdir || error "mkdir $tdir failed" + touch $DIR/$tdir/$tfile || error "touch $tdir/$tfile failed" + $CHECKSTAT -t file $DIR/$tdir/$tfile || error "$tdir/$tfile not a file" rm -r $DIR/$tdir - $CHECKSTAT -a $DIR/$tdir || error -} -run_test 2b "rm -r .../d2; checkstat .../d2/f ======================" - -test_3a() { - test_mkdir -p $DIR/$tdir - $CHECKSTAT -t dir $DIR/$tdir || error + $CHECKSTAT -a $DIR/$tdir/$tfile || error "$tdir/$file is not removed" } -run_test 3a "mkdir .../d3 ======================================" +run_test 2 "mkdir; touch; rmdir; check file ====================" -test_3b() { - if [ ! -d $DIR/$tdir ]; then - mkdir $DIR/$tdir - fi +test_3() { + test_mkdir -p $DIR/$tdir || error "mkdir $tdir failed" + $CHECKSTAT -t dir $DIR/$tdir || error "$tdir is not a directory" touch $DIR/$tdir/$tfile - $CHECKSTAT -t file $DIR/$tdir/$tfile || error -} -run_test 3b "touch .../d3/f ====================================" - -test_3c() { + $CHECKSTAT -t file $DIR/$tdir/$tfile || error "$tdir/$tfile not a file" rm -r $DIR/$tdir - $CHECKSTAT -a $DIR/$tdir || error + $CHECKSTAT -a $DIR/$tdir || error "$tdir is not removed" } -run_test 3c "rm -r .../d3 ======================================" +run_test 3 "mkdir; touch; rmdir; check dir =====================" -test_4a() { - test_mkdir -p $DIR/$tdir - $CHECKSTAT -t dir $DIR/$tdir || error +test_4() { + test_mkdir -p $DIR/$tdir || error "mkdir $tdir failed" + $CHECKSTAT -t dir $DIR/$tdir || error "$tdir is not a directory" + test_mkdir $DIR/$tdir/d2 || error "mkdir $tdir/d2 failed" + $CHECKSTAT -t dir $DIR/$tdir/d2 || error "$tdir/d2 is not a directory" } -run_test 4a "mkdir .../d4 ======================================" - -test_4b() { - if [ ! -d $DIR/$tdir ]; then - test_mkdir $DIR/$tdir - fi - test_mkdir $DIR/$tdir/d2 - mkdir $DIR/$tdir/d2 - $CHECKSTAT -t dir $DIR/$tdir/d2 || error -} -run_test 4b "mkdir .../d4/d2 ===================================" +run_test 4 "mkdir ==============================================" test_5() { - test_mkdir $DIR/$tdir - test_mkdir $DIR/$tdir/d2 - chmod 0707 $DIR/$tdir/d2 - $CHECKSTAT -t dir -p 0707 $DIR/$tdir/d2 || error + test_mkdir -p $DIR/$tdir || error "mkdir $tdir failed" + test_mkdir $DIR/$tdir/d2 || error "mkdir $tdir/d2 failed" + chmod 0707 $DIR/$tdir/d2 || error "chmod 0707 $tdir/d2 failed" + $CHECKSTAT -t dir -p 0707 $DIR/$tdir/d2 || error "$tdir/d2 not mode 707" + $CHECKSTAT -t dir $DIR/$tdir/d2 || error "$tdir/d2 is not a directory" } run_test 5 "mkdir .../d5 .../d5/d2; chmod .../d5/d2 ============" test_6a() { - touch $DIR/$tfile - chmod 0666 $DIR/$tfile || error - $CHECKSTAT -t file -p 0666 -u \#$UID $DIR/$tfile || error + touch $DIR/$tfile || error "touch $DIR/$tfile failed" + chmod 0666 $DIR/$tfile || error "chmod 0666 $tfile failed" + $CHECKSTAT -t file -p 0666 -u \#$UID $DIR/$tfile || + error "$tfile does not have perm 0666 or UID $UID" } run_test 6a "touch .../f6a; chmod .../f6a ======================" @@ -247,16 +224,18 @@ test_6b() { touch $DIR/$tfile chmod 0666 $DIR/$tfile fi - $RUNAS chmod 0444 $DIR/$tfile && error - $CHECKSTAT -t file -p 0666 -u \#$UID $DIR/$tfile || error + $RUNAS chmod 0444 $DIR/$tfile && error "chmod $tfile worked on UID $UID" + $CHECKSTAT -t file -p 0666 -u \#$UID $DIR/$tfile || + error "$tfile should be 0666 and owned by UID $UID" } run_test 6b "$RUNAS chmod .../f6a (should return error) ==" test_6c() { [ $RUNAS_ID -eq $UID ] && skip_env "RUNAS_ID = UID = $UID" && return touch $DIR/$tfile - chown $RUNAS_ID $DIR/$tfile || error - $CHECKSTAT -t file -u \#$RUNAS_ID $DIR/$tfile || error + chown $RUNAS_ID $DIR/$tfile || error "chown $RUNAS_ID $file failed" + $CHECKSTAT -t file -u \#$RUNAS_ID $DIR/$tfile || + error "$tfile should be owned by UID $RUNAS_ID" } run_test 6c "touch .../f6c; chown .../f6c ======================" @@ -266,16 +245,18 @@ test_6d() { touch $DIR/$tfile chown $RUNAS_ID $DIR/$tfile fi - $RUNAS chown $UID $DIR/$tfile && error - $CHECKSTAT -t file -u \#$RUNAS_ID $DIR/$tfile || error + $RUNAS chown $UID $DIR/$tfile && error "chown $UID $file succeeded" + $CHECKSTAT -t file -u \#$RUNAS_ID $DIR/$tfile || + error "$tfile should be owned by UID $RUNAS_ID" } run_test 6d "$RUNAS chown .../f6c (should return error) ==" test_6e() { [ $RUNAS_ID -eq $UID ] && skip_env "RUNAS_ID = UID = $UID" && return touch $DIR/$tfile - chgrp $RUNAS_ID $DIR/$tfile || error - $CHECKSTAT -t file -u \#$UID -g \#$RUNAS_ID $DIR/$tfile || error + chgrp $RUNAS_ID $DIR/$tfile || error "chgrp $RUNAS_ID $file failed" + $CHECKSTAT -t file -u \#$UID -g \#$RUNAS_ID $DIR/$tfile || + error "$tfile should be owned by GID $UID" } run_test 6e "touch .../f6e; chgrp .../f6e ======================" @@ -285,19 +266,21 @@ test_6f() { touch $DIR/$tfile chgrp $RUNAS_ID $DIR/$tfile fi - $RUNAS chgrp $UID $DIR/$tfile && error - $CHECKSTAT -t file -u \#$UID -g \#$RUNAS_ID $DIR/$tfile || error + $RUNAS chgrp $UID $DIR/$tfile && error "chgrp $UID $file succeeded" + $CHECKSTAT -t file -u \#$UID -g \#$RUNAS_ID $DIR/$tfile || + error "$tfile should be owned by UID $UID and GID $RUNAS_ID" } run_test 6f "$RUNAS chgrp .../f6e (should return error) ==" test_6g() { [ $RUNAS_ID -eq $UID ] && skip_env "RUNAS_ID = UID = $UID" && return - test_mkdir $DIR/$tdir || error - chmod 777 $DIR/$tdir || error - $RUNAS mkdir $DIR/$tdir/d || error - chmod g+s $DIR/$tdir/d || error - test_mkdir $DIR/$tdir/d/subdir - $CHECKSTAT -g \#$RUNAS_GID $DIR/$tdir/d/subdir || error + test_mkdir $DIR/$tdir || error "mkdir $tfile failed" + chmod 777 $DIR/$tdir || error "chmod 0777 $tdir failed" + $RUNAS mkdir $DIR/$tdir/d || error "mkdir $tdir/d failed" + chmod g+s $DIR/$tdir/d || error "chmod g+s $tdir/d failed" + test_mkdir $DIR/$tdir/d/subdir || error "mkdir $tdir/d/subdir failed" + $CHECKSTAT -g \#$RUNAS_GID $DIR/$tdir/d/subdir || + error "$tdir/d/subdir should be GID $RUNAS_GID" } run_test 6g "Is new dir in sgid dir inheriting group?" @@ -306,8 +289,9 @@ test_6h() { # bug 7331 touch $DIR/$tfile || error "touch failed" chown $RUNAS_ID:$RUNAS_GID $DIR/$tfile || error "initial chown failed" $RUNAS -G$RUNAS_GID chown $RUNAS_ID:0 $DIR/$tfile && - error "chown worked" - $CHECKSTAT -t file -u \#$RUNAS_ID -g \#$RUNAS_GID $DIR/$tfile || error + error "chown $RUNAS_ID:0 $tfile worked as GID $RUNAS_GID" + $CHECKSTAT -t file -u \#$RUNAS_ID -g \#$RUNAS_GID $DIR/$tfile || + error "$tdir/$tfile should be UID $RUNAS_UID GID $RUNAS_GID" } run_test 6h "$RUNAS chown RUNAS_ID.0 .../f6h (should return error)" @@ -315,7 +299,8 @@ test_7a() { test_mkdir $DIR/$tdir $MCREATE $DIR/$tdir/$tfile chmod 0666 $DIR/$tdir/$tfile - $CHECKSTAT -t file -p 0666 $DIR/$tdir/$tfile || error + $CHECKSTAT -t file -p 0666 $DIR/$tdir/$tfile || + error "$tdir/$tfile should be mode 0666" } run_test 7a "mkdir .../d7; mcreate .../d7/f; chmod .../d7/f ====" @@ -325,8 +310,8 @@ test_7b() { fi $MCREATE $DIR/$tdir/$tfile echo -n foo > $DIR/$tdir/$tfile - [ "`cat $DIR/$tdir/$tfile`" = "foo" ] || error - $CHECKSTAT -t file -s 3 $DIR/$tdir/$tfile || error + [ "$(cat $DIR/$tdir/$tfile)" = "foo" ] || error "$tdir/$tfile not 'foo'" + $CHECKSTAT -t file -s 3 $DIR/$tdir/$tfile || error "$tfile size not 3" } run_test 7b "mkdir .../d7; mcreate d7/f2; echo foo > d7/f2 =====" @@ -334,7 +319,8 @@ test_8() { test_mkdir $DIR/$tdir touch $DIR/$tdir/$tfile chmod 0666 $DIR/$tdir/$tfile - $CHECKSTAT -t file -p 0666 $DIR/$tdir/$tfile || error + $CHECKSTAT -t file -p 0666 $DIR/$tdir/$tfile || + error "$tfile mode not 0666" } run_test 8 "mkdir .../d8; touch .../d8/f; chmod .../d8/f =======" @@ -342,7 +328,7 @@ test_9() { test_mkdir $DIR/$tdir test_mkdir $DIR/$tdir/d2 test_mkdir $DIR/$tdir/d2/d3 - $CHECKSTAT -t dir $DIR/$tdir/d2/d3 || error + $CHECKSTAT -t dir $DIR/$tdir/d2/d3 || error "$tdir/d2/d3 not a dir" } run_test 9 "mkdir .../d9 .../d9/d2 .../d9/d2/d3 ================" @@ -350,7 +336,8 @@ test_10() { test_mkdir $DIR/$tdir test_mkdir $DIR/$tdir/d2 touch $DIR/$tdir/d2/$tfile - $CHECKSTAT -t file $DIR/$tdir/d2/$tfile || error + $CHECKSTAT -t file $DIR/$tdir/d2/$tfile || + error "$tdir/d2/$tfile not a file" } run_test 10 "mkdir .../d10 .../d10/d2; touch .../d10/d2/f ======" @@ -359,7 +346,8 @@ test_11() { test_mkdir $DIR/$tdir/d2 chmod 0666 $DIR/$tdir/d2 chmod 0705 $DIR/$tdir/d2 - $CHECKSTAT -t dir -p 0705 $DIR/$tdir/d2 || error + $CHECKSTAT -t dir -p 0705 $DIR/$tdir/d2 || + error "$tdir/d2 mode not 0705" } run_test 11 "mkdir .../d11 d11/d2; chmod .../d11/d2 ============" @@ -368,7 +356,8 @@ test_12() { touch $DIR/$tdir/$tfile chmod 0666 $DIR/$tdir/$tfile chmod 0654 $DIR/$tdir/$tfile - $CHECKSTAT -t file -p 0654 $DIR/$tdir/$tfile || error + $CHECKSTAT -t file -p 0654 $DIR/$tdir/$tfile || + error "$tdir/d2 mode not 0654" } run_test 12 "touch .../d12/f; chmod .../d12/f .../d12/f ========" @@ -376,7 +365,8 @@ test_13() { test_mkdir $DIR/$tdir dd if=/dev/zero of=$DIR/$tdir/$tfile count=10 > $DIR/$tdir/$tfile - $CHECKSTAT -t file -s 0 $DIR/$tdir/$tfile || error + $CHECKSTAT -t file -s 0 $DIR/$tdir/$tfile || + error "$tdir/$tfile size not 0 after truncate" } run_test 13 "creat .../d13/f; dd .../d13/f; > .../d13/f ========" @@ -384,7 +374,7 @@ test_14() { test_mkdir $DIR/$tdir touch $DIR/$tdir/$tfile rm $DIR/$tdir/$tfile - $CHECKSTAT -a $DIR/$tdir/$tfile || error + $CHECKSTAT -a $DIR/$tdir/$tfile || error "$tdir/$tfile not removed" } run_test 14 "touch .../d14/f; rm .../d14/f; rm .../d14/f =======" @@ -392,7 +382,8 @@ test_15() { test_mkdir $DIR/$tdir touch $DIR/$tdir/$tfile mv $DIR/$tdir/$tfile $DIR/$tdir/${tfile}_2 - $CHECKSTAT -t file $DIR/$tdir/${tfile}_2 || error + $CHECKSTAT -t file $DIR/$tdir/${tfile}_2 || + error "$tdir/${tfile_2} not a file after rename" } run_test 15 "touch .../d15/f; mv .../d15/f .../d15/f2 ==========" @@ -400,7 +391,7 @@ test_16() { test_mkdir $DIR/$tdir touch $DIR/$tdir/$tfile rm -rf $DIR/$tdir/$tfile - $CHECKSTAT -a $DIR/$tdir/$tfile || error + $CHECKSTAT -a $DIR/$tdir/$tfile || error "$tdir/$tfile not removed" } run_test 16 "touch .../d16/f; rm -rf .../d16/f =================" @@ -409,10 +400,12 @@ test_17a() { touch $DIR/$tdir/$tfile ln -s $DIR/$tdir/$tfile $DIR/$tdir/l-exist ls -l $DIR/$tdir - $CHECKSTAT -l $DIR/$tdir/$tfile $DIR/$tdir/l-exist || error - $CHECKSTAT -f -t f $DIR/$tdir/l-exist || error + $CHECKSTAT -l $DIR/$tdir/$tfile $DIR/$tdir/l-exist || + error "$tdir/l-exist not a symlink" + $CHECKSTAT -f -t f $DIR/$tdir/l-exist || + error "$tdir/l-exist not referencing a file" rm -f $DIR/$tdir/l-exist - $CHECKSTAT -a $DIR/$tdir/l-exist || error + $CHECKSTAT -a $DIR/$tdir/l-exist || error "$tdir/l-exist not removed" } run_test 17a "symlinks: create, remove (real) ==================" @@ -420,10 +413,12 @@ test_17b() { test_mkdir -p $DIR/$tdir ln -s no-such-file $DIR/$tdir/l-dangle ls -l $DIR/$tdir - $CHECKSTAT -l no-such-file $DIR/$tdir/l-dangle || error - $CHECKSTAT -fa $DIR/$tdir/l-dangle || error + $CHECKSTAT -l no-such-file $DIR/$tdir/l-dangle || + error "$tdir/l-dangle not referencing no-such-file" + $CHECKSTAT -fa $DIR/$tdir/l-dangle || + error "$tdir/l-dangle not referencing non-existent file" rm -f $DIR/$tdir/l-dangle - $CHECKSTAT -a $DIR/$tdir/l-dangle || error + $CHECKSTAT -a $DIR/$tdir/l-dangle || error "$tdir/l-dangle not removed" } run_test 17b "symlinks: create, remove (dangling) ==============" @@ -708,21 +703,22 @@ test_18() { run_test 18 "touch .../f ; ls ... ==============================" test_19a() { - touch $DIR/f19 + touch $DIR/$tfile ls -l $DIR - rm $DIR/f19 - $CHECKSTAT -a $DIR/f19 || error + rm $DIR/$tfile + $CHECKSTAT -a $DIR/$tfile || error "$tfile was not removed" } run_test 19a "touch .../f19 ; ls -l ... ; rm .../f19 ===========" test_19b() { - ls -l $DIR/f19 && error || true + ls -l $DIR/$tfile && error "ls -l $tfile failed"|| true } run_test 19b "ls -l .../f19 (should return error) ==============" test_19c() { - [ $RUNAS_ID -eq $UID ] && skip_env "RUNAS_ID = UID = $UID -- skipping" && return - $RUNAS touch $DIR/f19 && error || true + [ $RUNAS_ID -eq $UID ] && + skip_env "RUNAS_ID = UID = $UID -- skipping" && return + $RUNAS touch $DIR/$tfile && error "create non-root file failed" || true } run_test 19c "$RUNAS touch .../f19 (should return error) ==" @@ -732,27 +728,28 @@ test_19d() { run_test 19d "cat .../f19 (should return error) ==============" test_20() { - touch $DIR/f - rm $DIR/f + touch $DIR/$tfile + rm $DIR/$tfile log "1 done" - touch $DIR/f - rm $DIR/f + touch $DIR/$tfile + rm $DIR/$tfile log "2 done" - touch $DIR/f - rm $DIR/f + touch $DIR/$tfile + rm $DIR/$tfile log "3 done" - $CHECKSTAT -a $DIR/f || error + $CHECKSTAT -a $DIR/$tfile || error "$tfile was not removed" } run_test 20 "touch .../f ; ls -l ... ===========================" test_21() { - test_mkdir $DIR/d21 - [ -f $DIR/d21/dangle ] && rm -f $DIR/d21/dangle - ln -s dangle $DIR/d21/link - echo foo >> $DIR/d21/link - cat $DIR/d21/dangle - $CHECKSTAT -t link $DIR/d21/link || error - $CHECKSTAT -f -t file $DIR/d21/link || error + test_mkdir -p $DIR/$tdir + [ -f $DIR/$tdir/dangle ] && rm -f $DIR/$tdir/dangle + ln -s dangle $DIR/$tdir/link + echo foo >> $DIR/$tdir/link + cat $DIR/$tdir/dangle + $CHECKSTAT -t link $DIR/$tdir/link || error "$tdir/link not a link" + $CHECKSTAT -f -t file $DIR/$tdir/link || + error "$tdir/link not linked to a file" } run_test 21 "write to dangling link ============================" @@ -792,43 +789,43 @@ test_23b() { # bug 18988 } run_test 23b "O_APPEND check ==========================" +# rename sanity test_24a() { - echo '== rename sanity ==============================================' echo '-- same directory rename' - test_mkdir $DIR/R1 - touch $DIR/R1/f - mv $DIR/R1/f $DIR/R1/g - $CHECKSTAT -t file $DIR/R1/g || error + test_mkdir $DIR/$tdir + touch $DIR/$tdir/$tfile.1 + mv $DIR/$tdir/$tfile.1 $DIR/$tdir/$tfile.2 + $CHECKSTAT -t file $DIR/$tdir/$tfile.2 || error "$tfile.2 not a file" } -run_test 24a "touch .../R1/f; rename .../R1/f .../R1/g =========" +run_test 24a "rename file to non-existent target" test_24b() { - test_mkdir $DIR/R2 - touch $DIR/R2/{f,g} - mv $DIR/R2/f $DIR/R2/g - $CHECKSTAT -a $DIR/R2/f || error - $CHECKSTAT -t file $DIR/R2/g || error + test_mkdir $DIR/$tdir + touch $DIR/$tdir/$tfile.{1,2} + mv $DIR/$tdir/$tfile.1 $DIR/$tdir/$tfile.2 + $CHECKSTAT -a $DIR/$tdir/$tfile.1 || error "$tfile.1 exists" + $CHECKSTAT -t file $DIR/$tdir/$tfile.2 || error "$tfile.2 not a file" } -run_test 24b "touch .../R2/{f,g}; rename .../R2/f .../R2/g =====" +run_test 24b "rename file to existing target" test_24c() { - test_mkdir $DIR/R3 - test_mkdir $DIR/R3/f - mv $DIR/R3/f $DIR/R3/g - $CHECKSTAT -a $DIR/R3/f || error - $CHECKSTAT -t dir $DIR/R3/g || error + test_mkdir $DIR/$tdir + test_mkdir $DIR/$tdir/d$testnum.1 + mv $DIR/$tdir/d$testnum.1 $DIR/$tdir/d$testnum.2 + $CHECKSTAT -a $DIR/$tdir/d$testnum.1 || error "d$testnum.1 exists" + $CHECKSTAT -t dir $DIR/$tdir/d$testnum.2 || error "d$testnum.2 not dir" } -run_test 24c "mkdir .../R3/f; rename .../R3/f .../R3/g =========" +run_test 24c "rename directory to non-existent target" test_24d() { - test_mkdir $DIR/R4 - test_mkdir $DIR/R4/f - test_mkdir $DIR/R4/g - mrename $DIR/R4/f $DIR/R4/g - $CHECKSTAT -a $DIR/R4/f || error - $CHECKSTAT -t dir $DIR/R4/g || error + test_mkdir $DIR/$tdir + test_mkdir $DIR/$tdir/d$testnum.1 + test_mkdir $DIR/$tdir/d$ttestnum.2 + mrename $DIR/$tdir/d$testnum.1 $DIR/$tdir/d$testnum.2 + $CHECKSTAT -a $DIR/$tdir/d$testnum.1 || error "d$testnum.1 exists" + $CHECKSTAT -t dir $DIR/$tdir/d$testnum.2 || error "d$testnum.2 not dir" } -run_test 24d "mkdir .../R4/{f,g}; rename .../R4/f .../R4/g =====" +run_test 24d "rename directory to existing target" test_24e() { echo '-- cross directory renames --' @@ -1867,6 +1864,7 @@ test_27C() { #LU-2871 declare -a ost_idx local index + local found local i local j @@ -1879,11 +1877,21 @@ test_27C() { #LU-2871 ost_idx=($($GETSTRIPE $tfile$i | tail -n $((OSTCOUNT + 1)) | awk '{print $1}')) echo ${ost_idx[@]} + # check the layout - for j in $(seq 0 $((OSTCOUNT - 1))); do - index=$(((i + j) % OSTCOUNT)) - [ ${ost_idx[$j]} -eq $index ] || - error "$j:${ost_idx[$j]} != $index" + [ ${#ost_idx[@]} -eq $OSTCOUNT ] || + error "${#ost_idx[@]} != $OSTCOUNT" + + for index in $(seq 0 $((OSTCOUNT - 1))); do + found=0 + for j in $(echo ${ost_idx[@]}); do + if [ $index -eq $j ]; then + found=1 + break + fi + done + [ $found = 1 ] || + error "Can not find $index in ${ost_idx[@]}" done done } @@ -2421,7 +2429,7 @@ test_33c() { for ostnum in $(seq $OSTCOUNT); do # test-framework's OST numbering is one-based, while Lustre's # is zero-based - ostname=$(printf "$FSNAME-OST%.4d" $((ostnum - 1))) + ostname=$(printf "$FSNAME-OST%.4x" $((ostnum - 1))) # Parsing llobdstat's output sucks; we could grep the /proc # path, but that's likely to not be as portable as using the # llobdstat utility. So we parse lctl output instead. @@ -2445,7 +2453,7 @@ test_33c() { # Total up write_bytes after writing. We'd better find non-zeros. for ostnum in $(seq $OSTCOUNT); do - ostname=$(printf "$FSNAME-OST%.4d" $((ostnum - 1))) + ostname=$(printf "$FSNAME-OST%.4x" $((ostnum - 1))) write_bytes=$(do_facet ost$ostnum lctl get_param -n \ obdfilter/$ostname/stats | awk '/^write_bytes/ {print $7}' ) @@ -2460,7 +2468,7 @@ test_33c() { if $all_zeros then for ostnum in $(seq $OSTCOUNT); do - ostname=$(printf "$FSNAME-OST%.4d" $((ostnum - 1))) + ostname=$(printf "$FSNAME-OST%.4x" $((ostnum - 1))) echo "Check that write_bytes is present in obdfilter/*/stats:" do_facet ost$ostnum lctl get_param -n \ obdfilter/$ostname/stats @@ -2586,6 +2594,12 @@ test_34h() { # flush when getting the group lock $MULTIOP $DIR/$tfile OG${gid}T${sz}g${gid}c & MULTIPID=$! + + # Since just timed wait is not good enough, let's do a sync write + # that way we are sure enough time for a roundtrip + processing + # passed + 2 seconds of extra margin. + dd if=/dev/zero of=$DIR/${tfile}-1 bs=4096 oflag=direct count=1 + rm $DIR/${tfile}-1 sleep 2 if [[ `ps h -o comm -p $MULTIPID` == "multiop" ]]; then @@ -3079,9 +3093,11 @@ test_39m() { run_test 39m "test atime and mtime before 1970" test_40() { - dd if=/dev/zero of=$DIR/f40 bs=4096 count=1 - $RUNAS $OPENFILE -f O_WRONLY:O_TRUNC $DIR/f40 && error - $CHECKSTAT -t file -s 4096 $DIR/f40 || error + dd if=/dev/zero of=$DIR/$tfile bs=4096 count=1 + $RUNAS $OPENFILE -f O_WRONLY:O_TRUNC $DIR/$tfile && + error "openfile O_WRONLY:O_TRUNC $tfile failed" + $CHECKSTAT -t file -s 4096 $DIR/$tfile || + error "$tfile is not 4096 bytes in size" } run_test 40 "failed open(O_TRUNC) doesn't truncate =============" @@ -3616,7 +3632,7 @@ test_50() { # bug 1485 test_mkdir $DIR/$tdir cd $DIR/$tdir - ls /proc/$$/cwd || error + ls /proc/$$/cwd || error "ls /proc/$$/cwd failed" } run_test 50 "special situations: /proc symlinks ===============" @@ -3628,13 +3644,13 @@ test_51a() { # was test_51 rm $DIR/$tdir/foo createmany -m $DIR/$tdir/longfile 201 FNUM=202 - while [ `ls -sd $DIR/$tdir | awk '{ print $1 }'` -eq 4 ]; do + while [ $(ls -sd $DIR/$tdir | awk '{ print $1 }') -eq 4 ]; do $MCREATE $DIR/$tdir/longfile$FNUM FNUM=$(($FNUM + 1)) echo -n "+" done echo - ls -l $DIR/$tdir > /dev/null || error + ls -l $DIR/$tdir > /dev/null || error "ls -l $DIR/$tdir failed" } run_test 51a "special situations: split htree with empty entry ==" @@ -3773,13 +3789,13 @@ test_52b() { error "link worked" echo foo >> $DIR/$tdir/foo && error "echo worked" mrename $DIR/$tdir/foo $DIR/$tdir/foo_ren && error "rename worked" - [ -f $DIR/$tdir/foo ] || error - [ -f $DIR/$tdir/foo_ren ] && error + [ -f $DIR/$tdir/foo ] || error "$tdir/foo is not a file" + [ -f $DIR/$tdir/foo_ren ] && error "$tdir/foo_ren is not a file" lsattr $DIR/$tdir/foo | egrep -q "^-+i[-e]+ $DIR/$tdir/foo" || error "lsattr" chattr -i $DIR/$tdir/foo || error "chattr failed" - rm -fr $DIR/$tdir || error + rm -fr $DIR/$tdir || error "unable to remove $DIR/$tdir" } run_test 52b "immutable flag test (should return errors) =======" @@ -3834,11 +3850,13 @@ test_53() { run_test 53 "verify that MDS and OSTs agree on pre-creation ====" test_54a() { - [ ! -f "$SOCKETSERVER" ] && skip_env "no socketserver, skipping" && return - [ ! -f "$SOCKETCLIENT" ] && skip_env "no socketclient, skipping" && return - $SOCKETSERVER $DIR/socket - $SOCKETCLIENT $DIR/socket || error - $MUNLINK $DIR/socket + [ ! -f "$SOCKETSERVER" ] && + skip_env "no socketserver, skipping" && return + [ ! -f "$SOCKETCLIENT" ] && + skip_env "no socketclient, skipping" && return + $SOCKETSERVER $DIR/socket + $SOCKETCLIENT $DIR/socket || error "$SOCKETCLIENT $DIR/socket failed" + $MUNLINK $DIR/socket } run_test 54a "unix domain socket test ==========================" @@ -3846,7 +3864,7 @@ test_54b() { f="$DIR/f54b" mknod $f c 1 3 chmod 0666 $f - dd if=/dev/zero of=$f bs=`page_size` count=1 + dd if=/dev/zero of=$f bs=$(page_size) count=1 } run_test 54b "char device works in lustre ======================" @@ -3855,7 +3873,7 @@ find_loop_dev() { [ -b /dev/loop0 ] && LOOPBASE=/dev/loop [ -z "$LOOPBASE" ] && echo "/dev/loop/0 and /dev/loop0 gone?" && return - for i in `seq 3 7`; do + for i in $(seq 3 7); do losetup $LOOPBASE$i > /dev/null 2>&1 && continue LOOPDEV=$LOOPBASE$i LOOPNUM=$i @@ -3891,7 +3909,7 @@ test_54d() { f="$DIR/f54d" string="aaaaaa" mknod $f p - [ "$string" = `echo $string > $f | cat $f` ] || error + [ "$string" = $(echo $string > $f | cat $f) ] || error "$f != $string" } run_test 54d "fifo device works in lustre ======================" @@ -3900,7 +3918,7 @@ test_54e() { f="$DIR/f54e" string="aaaaaa" cp -aL /dev/console $f - echo $string > $f || error + echo $string > $f || error "echo $string to $f failed" } run_test 54e "console/tty device works in lustre ======================" @@ -4662,9 +4680,9 @@ run_test 60d "test printk console message masking" test_61() { [ $PARALLEL == "yes" ] && skip "skip parallel run" && return f="$DIR/f61" - dd if=/dev/zero of=$f bs=`page_size` count=1 + dd if=/dev/zero of=$f bs=$(page_size) count=1 || error "dd $f failed" cancel_lru_locks osc - $MULTIOP $f OSMWUc || error + $MULTIOP $f OSMWUc || error "$MULTIOP $f failed" sync } run_test 61 "mmap() writes don't make sync hang ================" @@ -5057,26 +5075,29 @@ run_test 71 "Running dbench on lustre (don't segment fault) ====" test_72a() { # bug 5695 - Test that on 2.6 remove_suid works properly [ $PARALLEL == "yes" ] && skip "skip parallel run" && return - check_kernel_version 43 || return 0 - [ "$RUNAS_ID" = "$UID" ] && skip_env "RUNAS_ID = UID = $UID -- skipping" && return + [ "$RUNAS_ID" = "$UID" ] && + skip_env "RUNAS_ID = UID = $UID -- skipping" && return - # Check that testing environment is properly set up. Skip if not - FAIL_ON_ERROR=false check_runas_id_ret $RUNAS_ID $RUNAS_GID $RUNAS || { - skip_env "User $RUNAS_ID does not exist - skipping" - return 0 - } + # Check that testing environment is properly set up. Skip if not + FAIL_ON_ERROR=false check_runas_id_ret $RUNAS_ID $RUNAS_GID $RUNAS || { + skip_env "User $RUNAS_ID does not exist - skipping" + return 0 + } # We had better clear the $DIR to get enough space for dd rm -rf $DIR/* - touch $DIR/f72 - chmod 777 $DIR/f72 - chmod ug+s $DIR/f72 - $RUNAS dd if=/dev/zero of=$DIR/f72 bs=512 count=1 || error + touch $DIR/$tfile + chmod 777 $DIR/$tfile + chmod ug+s $DIR/$tfile + $RUNAS dd if=/dev/zero of=$DIR/$tfile bs=512 count=1 || + error "$RUNAS dd $DIR/$tfile failed" # See if we are still setuid/sgid - test -u $DIR/f72 -o -g $DIR/f72 && error "S/gid is not dropped on write" + test -u $DIR/$tfile -o -g $DIR/$tfile && + error "S/gid is not dropped on write" # Now test that MDS is updated too cancel_lru_locks mdc - test -u $DIR/f72 -o -g $DIR/f72 && error "S/gid is not dropped on MDS" - rm -f $DIR/f72 + test -u $DIR/$tfile -o -g $DIR/$tfile && + error "S/gid is not dropped on MDS" + rm -f $DIR/$tfile } run_test 72a "Test that remove suid works properly (bug5695) ====" @@ -5578,20 +5599,21 @@ test_82() { # LU-1031 run_test 82 "Basic grouplock test ===============================" test_99a() { - [ -z "$(which cvs 2>/dev/null)" ] && skip_env "could not find cvs" && \ - return + [ -z "$(which cvs 2>/dev/null)" ] && skip_env "could not find cvs" && + return test_mkdir -p $DIR/d99cvsroot chown $RUNAS_ID $DIR/d99cvsroot local oldPWD=$PWD # bug 13584, use $TMP as working dir cd $TMP - $RUNAS cvs -d $DIR/d99cvsroot init || error + $RUNAS cvs -d $DIR/d99cvsroot init || error "cvs init failed" cd $oldPWD } run_test 99a "cvs init =========================================" test_99b() { - [ -z "$(which cvs 2>/dev/null)" ] && skip_env "could not find cvs" && return + [ -z "$(which cvs 2>/dev/null)" ] && + skip_env "could not find cvs" && return [ ! -d $DIR/d99cvsroot ] && test_99a cd /etc/init.d # some versions of cvs import exit(1) when asked to import links or @@ -6004,19 +6026,21 @@ test_102a() { touch $testfile [ "$UID" != 0 ] && skip_env "must run as root" && return - [ -z "`lctl get_param -n mdc.*-mdc-*.connect_flags | grep xattr`" ] && + [ -z "$(lctl get_param -n mdc.*-mdc-*.connect_flags | grep xattr)" ] && skip_env "must have user_xattr" && return [ -z "$(which setfattr 2>/dev/null)" ] && skip_env "could not find setfattr" && return echo "set/get xattr..." - setfattr -n trusted.name1 -v value1 $testfile || error + setfattr -n trusted.name1 -v value1 $testfile || + error "setfattr -n trusted.name1=value1 $testfile failed" getfattr -n trusted.name1 $testfile 2> /dev/null | grep "trusted.name1=.value1" || error "$testfile missing trusted.name1=value1" - setfattr -n user.author1 -v author1 $testfile || error + setfattr -n user.author1 -v author1 $testfile || + error "setfattr -n user.author1=author1 $testfile failed" getfattr -n user.author1 $testfile 2> /dev/null | grep "user.author1=.author1" || error "$testfile missing trusted.author1=author1" @@ -6297,51 +6321,53 @@ run_acl_subtest() } test_103 () { - [ "$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 - [ -z "$(which setfacl 2>/dev/null)" ] && skip_env "could not find setfacl" && return - $GSS && skip "could not run under gss" && return + [ "$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 + [ -z "$(which setfacl 2>/dev/null)" ] && + skip_env "could not find setfacl" && return + $GSS && skip "could not run under gss" && return - declare -a identity_old + declare -a identity_old for num in $(seq $MDSCOUNT); do switch_identity $num true || identity_old[$num]=$? done - SAVE_UMASK=`umask` - umask 0022 - cd $DIR - - echo "performing cp ..." - run_acl_subtest cp || error - echo "performing getfacl-noacl..." - run_acl_subtest getfacl-noacl || error "getfacl-noacl test failed" - echo "performing misc..." - run_acl_subtest misc || error "misc test failed" - echo "performing permissions..." - run_acl_subtest permissions || error "permissions failed" - echo "performing setfacl..." - run_acl_subtest setfacl || error "setfacl test failed" - - # inheritance test got from HP - echo "performing inheritance..." - cp $LUSTRE/tests/acl/make-tree . || error "cannot copy make-tree" - chmod +x make-tree || error "chmod +x failed" - run_acl_subtest inheritance || error "inheritance test failed" - rm -f make-tree + SAVE_UMASK=$(umask) + umask 0022 + cd $DIR + + echo "performing cp ..." + run_acl_subtest cp || error "run_acl_subtest cp failed" + echo "performing getfacl-noacl..." + run_acl_subtest getfacl-noacl || error "getfacl-noacl test failed" + echo "performing misc..." + run_acl_subtest misc || error "misc test failed" + echo "performing permissions..." + run_acl_subtest permissions || error "permissions failed" + echo "performing setfacl..." + run_acl_subtest setfacl || error "setfacl test failed" + + # inheritance test got from HP + echo "performing inheritance..." + cp $LUSTRE/tests/acl/make-tree . || error "cannot copy make-tree" + chmod +x make-tree || error "chmod +x failed" + run_acl_subtest inheritance || error "inheritance test failed" + rm -f make-tree echo "LU-974 ignore umask when acl is enabled..." - run_acl_subtest 974 || error "LU-974 test failed" + run_acl_subtest 974 || error "LU-974 umask test failed" if [ $MDSCOUNT -ge 2 ]; then run_acl_subtest 974_remote || - error "LU-974 test failed under remote dir" + error "LU-974 umask test failed under remote dir" fi - echo "LU-2561 newly created file is same size as directory..." - run_acl_subtest 2561 || error "LU-2561 test failed" + echo "LU-2561 newly created file is same size as directory..." + run_acl_subtest 2561 || error "LU-2561 test failed" - cd $SAVE_PWD - umask $SAVE_UMASK + cd $SAVE_PWD + umask $SAVE_UMASK for num in $(seq $MDSCOUNT); do if [ "${identity_old[$num]}" = 1 ]; then @@ -6361,12 +6387,12 @@ 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 dl |grep OST0000-osc-[^M] |awk '{print $4}'` + local 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 activate - # wait the osc back to normal - wait_osc_import_state client ost FULL + # 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 @@ -6375,12 +6401,13 @@ run_test 104a "lfs df [-ih] [path] test =========================" test_104b() { [ $PARALLEL == "yes" ] && skip "skip parallel run" && return - [ $RUNAS_ID -eq $UID ] && skip_env "RUNAS_ID = UID = $UID -- skipping" && return + [ $RUNAS_ID -eq $UID ] && + skip_env "RUNAS_ID = UID = $UID -- skipping" && return chmod 666 /dev/obd - denied_cnt=$((`$RUNAS $LFS check servers 2>&1 | grep "Permission denied" | wc -l`)) - if [ $denied_cnt -ne 0 ]; - then - error "lfs check servers test failed" + denied_cnt=$(($($RUNAS $LFS check servers 2>&1 | + grep "Permission denied" | wc -l))) + if [ $denied_cnt -ne 0 ]; then + error "lfs check servers test failed" fi } run_test 104b "$RUNAS lfs check servers test ====================" @@ -6388,7 +6415,7 @@ run_test 104b "$RUNAS lfs check servers test ====================" test_105a() { # doesn't work on 2.4 kernels touch $DIR/$tfile - if [ -n "`mount | grep \"$MOUNT.*flock\" | grep -v noflock`" ]; then + if [ -n "$(mount | grep "$MOUNT.*flock" | grep -v noflock)" ]; then flocks_test 1 on -f $DIR/$tfile || error "fail flock on" else flocks_test 1 off -f $DIR/$tfile || error "fail flock off" @@ -6399,7 +6426,7 @@ run_test 105a "flock when mounted without -o flock test ========" test_105b() { touch $DIR/$tfile - if [ -n "`mount | grep \"$MOUNT.*flock\" | grep -v noflock`" ]; then + if [ -n "$(mount | grep "$MOUNT.*flock" | grep -v noflock)" ]; then flocks_test 1 on -c $DIR/$tfile || error "fail flock on" else flocks_test 1 off -c $DIR/$tfile || error "fail flock off" @@ -6410,7 +6437,7 @@ run_test 105b "fcntl when mounted without -o flock test ========" test_105c() { touch $DIR/$tfile - if [ -n "`mount | grep \"$MOUNT.*flock\" | grep -v noflock`" ]; then + if [ -n "$(mount | grep "$MOUNT.*flock" | grep -v noflock)" ]; then flocks_test 1 on -l $DIR/$tfile || error "fail flock on" else flocks_test 1 off -l $DIR/$tfile || error "fail flock off" @@ -6422,7 +6449,7 @@ run_test 105c "lockf when mounted without -o flock test ========" test_105d() { # bug 15924 [ $PARALLEL == "yes" ] && skip "skip parallel run" && return test_mkdir -p $DIR/$tdir - [ -z "`mount | grep \"$MOUNT.*flock\" | grep -v noflock`" ] && \ + [ -z "$(mount | grep "$MOUNT.*flock" | grep -v noflock)" ] && skip "mount w/o flock enabled" && return #define OBD_FAIL_LDLM_CP_CB_WAIT 0x315 $LCTL set_param fail_loc=0x80000315 @@ -6431,7 +6458,7 @@ test_105d() { # bug 15924 run_test 105d "flock race (should not freeze) ========" test_105e() { # bug 22660 && 22040 - [ -z "`mount | grep \"$MOUNT.*flock\" | grep -v noflock`" ] && \ + [ -z "$(mount | grep "$MOUNT.*flock" | grep -v noflock)" ] && skip "mount w/o flock enabled" && return touch $DIR/$tfile flocks_test 3 $DIR/$tfile @@ -8617,17 +8644,17 @@ test_151() { return 0 fi -#define OBD_FAIL_OBD_NO_LRU 0x609 + #define OBD_FAIL_OBD_NO_LRU 0x609 do_nodes $list $LCTL set_param fail_loc=0x609 # pages should be in the case right after write dd if=/dev/urandom of=$DIR/$tfile bs=4k count=$CPAGES || error "dd failed" - local BEFORE=`roc_hit` + local BEFORE=$(roc_hit) cancel_lru_locks osc cat $DIR/$tfile >/dev/null - local AFTER=`roc_hit` + local AFTER=$(roc_hit) do_nodes $list $LCTL set_param fail_loc=0 @@ -8641,10 +8668,10 @@ test_151() { cat $DIR/$tfile >/dev/null # now data shouldn't be found in the cache - BEFORE=`roc_hit` + BEFORE=$(roc_hit) cancel_lru_locks osc cat $DIR/$tfile >/dev/null - AFTER=`roc_hit` + AFTER=$(roc_hit) if let "AFTER - BEFORE != 0"; then error "IN CACHE: before: $BEFORE, after: $AFTER" fi @@ -8769,11 +8796,6 @@ dot_lustre_fid_permission_check() { mrename $test_dir/$tdir $MOUNT/.lustre/fid && error "rename to $MOUNT/.lustre/fid should fail." - echo "rename .lustre to itself" - fid=$($LFS path2fid $MOUNT) - mrename $MOUNT/.lustre $MOUNT/.lustre/fid/$fid/.lustre && - error "rename .lustre to itself should fail." - local old_obf_mode=$(stat --format="%a" $DIR/.lustre/fid) local new_obf_mode=777 @@ -9516,7 +9538,7 @@ cleanup_obdecho_osc () { return 0 } -obdecho_create_test() { +obdecho_test() { local OBD=$1 local node=$2 local rc=0 @@ -9529,9 +9551,13 @@ obdecho_create_test() { [ ${PIPESTATUS[0]} -eq 0 -a -n "$id" ] || rc=3 fi echo "New object id is $id" - [ $rc -eq 0 ] && { do_facet $node "$LCTL --device ec test_brw 10 w v 64 $id" || - rc=4; } - [ $rc -eq 0 -o $rc -gt 2 ] && { do_facet $node "$LCTL --device ec " \ + [ $rc -eq 0 ] && { do_facet $node "$LCTL --device ec getattr $id" || + rc=4; } + [ $rc -eq 0 ] && { do_facet $node "$LCTL --device ec test_brw 10 w v 64 $id" || + rc=4; } + [ $rc -eq 0 ] && { do_facet $node "$LCTL --device ec destroy $id 1" || + rc=4; } + [ $rc -eq 0 -o $rc -gt 2 ] && { do_facet $node "$LCTL --device ec " \ "cleanup" || rc=5; } [ $rc -eq 0 -o $rc -gt 1 ] && { do_facet $node "$LCTL --device ec " \ "detach" || rc=6; } @@ -9541,43 +9567,43 @@ obdecho_create_test() { test_180a() { [ $PARALLEL == "yes" ] && skip "skip parallel run" && return - remote_ost_nodsh && skip "remote OST with nodsh" && return - local rc=0 - local rmmod_local=0 + remote_ost_nodsh && skip "remote OST with nodsh" && return + local rc=0 + local rmmod_local=0 - if ! module_loaded obdecho; then - load_module obdecho/obdecho - rmmod_local=1 - fi + if ! module_loaded obdecho; then + load_module obdecho/obdecho + rmmod_local=1 + fi - local osc=$($LCTL dl | grep -v mdt | awk '$3 == "osc" {print $4; exit}') - 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 - [ $rc -eq 0 ] && { obdecho_create_test ${target}_osc client || rc=2; } - [[ -n $target ]] && cleanup_obdecho_osc $target - [ $rmmod_local -eq 1 ] && rmmod obdecho - return $rc + local osc=$($LCTL dl | grep -v mdt | awk '$3 == "osc" {print $4; exit}') + 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 + [ $rc -eq 0 ] && { obdecho_test ${target}_osc client || rc=2; } + [[ -n $target ]] && cleanup_obdecho_osc $target + [ $rmmod_local -eq 1 ] && rmmod obdecho + return $rc } run_test 180a "test obdecho on osc" test_180b() { [ $PARALLEL == "yes" ] && skip "skip parallel run" && return - remote_ost_nodsh && skip "remote OST with nodsh" && return - local rc=0 - local rmmod_remote=0 - - 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 + remote_ost_nodsh && skip "remote OST with nodsh" && return + local rc=0 + local rmmod_remote=0 + + 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_test $target ost1 || rc=1; } + [ $rmmod_remote -eq 1 ] && do_facet ost1 "rmmod obdecho" + return $rc } run_test 180b "test obdecho directly on obdfilter" @@ -9755,6 +9781,37 @@ test_184c() { } run_test 184c "Concurrent write and layout swap" +test_184d() { + check_swap_layouts_support && return 0 + + local file1=$DIR/$tdir/$tfile-1 + local file2=$DIR/$tdir/$tfile-2 + local file3=$DIR/$tdir/$tfile-3 + local lovea1 + local lovea2 + + 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" + lovea1=$($LFS getstripe $file1 | sed 1d) + + $LFS swap_layouts $file2 $file3 || + error "swap $file2 $file3 layouts failed" + $LFS swap_layouts $file1 $file2 || + error "swap $file1 $file2 layouts failed" + + lovea2=$($LFS getstripe $file2 | sed 1d) + [ "$lovea1" == "$lovea2" ] || error "lovea $lovea1 != $lovea2" + + lovea1=$(getfattr -n trusted.lov $file1 | grep ^trusted) + [ -z $lovea1 ] || error "$file1 shouldn't have lovea" +} +run_test 184d "allow stripeless layouts swap" + + test_185() { # LU-2441 mkdir -p $DIR/$tdir || error "creating dir $DIR/$tdir" touch $DIR/$tdir/spoo @@ -10511,16 +10568,20 @@ run_test 215 "/proc/sys/lnet exists and has proper content - bugs 18102, 21079, test_216() { # bug 20317 [ $PARALLEL == "yes" ] && skip "skip parallel run" && return - 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 - for node in $(osts_nodes); do - save_lustre_params $node "ldlm.namespaces.filter-*.max_nolock_bytes" >> $p - save_lustre_params $node "ldlm.namespaces.filter-*.contended_locks" >> $p - save_lustre_params $node "ldlm.namespaces.filter-*.contention_seconds" >> $p - done - clear_osc_stats + remote_ost_nodsh && skip "remote OST with nodsh" && return + + local node + local facets=$(get_facets OST) + local p="$TMP/$TESTSUITE-$TESTNAME.parameters" + + save_lustre_params client "osc.*.contention_seconds" > $p + save_lustre_params $facets \ + "ldlm.namespaces.filter-*.max_nolock_bytes" >> $p + save_lustre_params $facets \ + "ldlm.namespaces.filter-*.contended_locks" >> $p + save_lustre_params $facets \ + "ldlm.namespaces.filter-*.contention_seconds" >> $p + clear_osc_stats # agressive lockless i/o settings for node in $(osts_nodes); do @@ -11136,6 +11197,13 @@ test_232() { } run_test 232 "failed lock should not block umount" +test_233() { + local fid=$($LFS path2fid $MOUNT) + stat $MOUNT/.lustre/fid/$fid > /dev/null || + error "cannot access $MOUNT using its FID '$fid'" +} +run_test 233 "checking that OBF of the FS root succeeds" + # # tests that do cleanup/setup should be run at the end #