X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftests%2Fsanityn.sh;h=7ecfa9de7adf05caf0a154be8e808964471b5d63;hb=5700f5bc3c5bb0e65ca84f34c7b642066d8489e2;hp=80ad91ec1301653f13050f2ca66c78eb7a8ddd87;hpb=654a65fcb6341d125904a174cbbcaab2b1921847;p=fs%2Flustre-release.git diff --git a/lustre/tests/sanityn.sh b/lustre/tests/sanityn.sh index 80ad91e..7ecfa9d 100644 --- a/lustre/tests/sanityn.sh +++ b/lustre/tests/sanityn.sh @@ -26,7 +26,6 @@ SETSTRIPE=${SETSTRIPE:-lstripe} MCREATE=${MCREATE:-mcreate} OPENFILE=${OPENFILE:-openfile} OPENUNLINK=${OPENUNLINK:-openunlink} -TRUNCATE=${TRUNCATE:-truncate} export TMP=${TMP:-/tmp} MOUNT_2=${MOUNT_2:-"yes"} CHECK_GRANT=${CHECK_GRANT:-"yes"} @@ -65,7 +64,7 @@ rm -rf $DIR1/[df][0-9]* $DIR1/lnk # $RUNAS_ID may get set incorrectly somewhere else [ $UID -eq 0 -a $RUNAS_ID -eq 0 ] && error "\$RUNAS_ID set to 0, but \$UID is also 0!" -check_runas_id $RUNAS_ID $RUNAS_ID $RUNAS +check_runas_id $RUNAS_ID $RUNAS_GID $RUNAS build_test_filter @@ -148,7 +147,7 @@ run_test 4 "fstat validation on multiple mount points ==========" test_5() { mcreate $DIR1/f5 - truncate $DIR2/f5 100 + $TRUNCATE $DIR2/f5 100 $CHECKSTAT -t file -s 100 $DIR1/f5 || error rm $DIR1/f5 } @@ -208,13 +207,13 @@ test_10b() { yes "R" | head -c 4000 >$TMP/f10b-seed dd if=$TMP/f10b-seed of=$DIR1/f10b bs=3k count=1 || error "dd $DIR1" - truncate $DIR1/f10b 4096 || error "truncate 4096" + $TRUNCATE $DIR1/f10b 4096 || error "truncate 4096" dd if=$DIR2/f10b of=$TMP/f10b-lustre bs=4k count=1 || error "dd $DIR2" # create a test file locally to compare dd if=$TMP/f10b-seed of=$TMP/f10b bs=3k count=1 || error "dd random" - truncate $TMP/f10b 4096 || error "truncate 4096" + $TRUNCATE $TMP/f10b 4096 || error "truncate 4096" cmp $TMP/f10b $TMP/f10b-lustre || error "file miscompare" rm $TMP/f10b $TMP/f10b-lustre $TMP/f10b-seed } @@ -284,7 +283,7 @@ test_14b() { # bug 3192, 7040 cp -p `which multiop` $DIR1/d14/multiop || error "cp failed" MULTIOP_PROG=$DIR1/d14/multiop multiop_bg_pause $TMP/test14.junk O_c || return 1 MULTIOP_PID=$! - truncate $DIR2/d14/multiop 0 && kill -9 $MULTIOP_PID && \ + $TRUNCATE $DIR2/d14/multiop 0 && kill -9 $MULTIOP_PID && \ error "expected truncate error, got success" kill -USR1 $MULTIOP_PID || return 2 wait $MULTIOP_PID || return 3 @@ -473,13 +472,13 @@ test_25() { chmod 0755 $DIR1/$tdir/f1 || error "chmod 0755 $DIR1/$tdir/f1" $RUNAS $CHECKSTAT $DIR2/$tdir/f1 || error "checkstat $DIR2/$tdir/f1 #1" - setfacl -m u:$RUNAS_ID:--- $DIR1/$tdir || error "setfacl $DIR2/$tdir #1" + setfacl -m u:$RUNAS_ID:--- -m g:$RUNAS_GID:--- $DIR1/$tdir || error "setfacl $DIR2/$tdir #1" $RUNAS $CHECKSTAT $DIR2/$tdir/f1 && error "checkstat $DIR2/$tdir/f1 #2" - setfacl -m u:$RUNAS_ID:r-x $DIR1/$tdir || error "setfacl $DIR2/$tdir #2" + setfacl -m u:$RUNAS_ID:r-x -m g:$RUNAS_GID:r-x $DIR1/$tdir || error "setfacl $DIR2/$tdir #2" $RUNAS $CHECKSTAT $DIR2/$tdir/f1 || error "checkstat $DIR2/$tdir/f1 #3" - setfacl -m u:$RUNAS_ID:--- $DIR1/$tdir || error "setfacl $DIR2/$tdir #3" + setfacl -m u:$RUNAS_ID:--- -m g:$RUNAS_GID:--- $DIR1/$tdir || error "setfacl $DIR2/$tdir #3" $RUNAS $CHECKSTAT $DIR2/$tdir/f1 && error "checkstat $DIR2/$tdir/f1 #4" - setfacl -x u:$RUNAS_ID: $DIR1/$tdir || error "setfacl $DIR2/$tdir #4" + setfacl -x u:$RUNAS_ID: -x g:$RUNAS_GID: $DIR1/$tdir || error "setfacl $DIR2/$tdir #4" $RUNAS $CHECKSTAT $DIR2/$tdir/f1 || error "checkstat $DIR2/$tdir/f1 #5" rm -rf $DIR1/$tdir @@ -773,13 +772,22 @@ run_test 33a "commit on sharing, cross crete/delete, 2 clients, benchmark" # End commit on sharing tests +get_ost_lock_timeouts() { + local nodes=${1:-$(comma_list $(osts_nodes))} + + local locks=$(do_nodes $nodes \ + "lctl get_param -n ldlm.namespaces.filter-*.lock_timeouts" | calc_sum) + + echo $locks +} + test_34() { #16129 local OPER local lock_in local lock_out for OPER in notimeout timeout ; do rm $DIR1/$tfile 2>/dev/null - lock_in=$(do_nodes $(osts_nodes) "lctl get_param -n ldlm.namespaces.filter-*.lock_timeouts" | calc_sum) + lock_in=$(get_ost_lock_timeouts) if [ $OPER == "timeout" ] ; then for j in `seq $OSTCOUNT`; do #define OBD_FAIL_PTLRPC_HPREQ_TIMEOUT 0x511 @@ -800,7 +808,7 @@ test_34() { #16129 dd of=/dev/null if=$DIR2/$tfile > /dev/null 2>&1 # wait for a lock timeout sleep 4 - lock_out=$(do_nodes $(osts_nodes) "lctl get_param -n ldlm.namespaces.filter-*.lock_timeouts" | calc_sum) + lock_out=$(get_ost_lock_timeouts) if [ $OPER == "timeout" ] ; then if [ $lock_in == $lock_out ]; then error "no lock timeout happened" @@ -1017,6 +1025,851 @@ test_39c() { } run_test 39c "check truncate mtime update ======================" +# check that pid exists hence second operation wasn't blocked by first one +# if it is so then there is no conflict, return 0 +# else second operation is conflicting with first one, return 1 +check_pdo_conflict() { + local pid=$1 + local conflict=0 + if [[ `ps --pid $pid | wc -l` == 1 ]]; then + conflict=1 + echo "Conflict" + else + echo "No conflict" + fi + return $conflict +} + +# pdirop tests +# test 40: check non-blocking operations +test_40a() { +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + mkdir $DIR1/$tfile & + PID1=$! + sleep 1 + touch $DIR2/$tfile-2 + check_pdo_conflict $PID1 || error "create is blocked" + mkdir $DIR2/$tfile-3 + check_pdo_conflict $PID1 || error "mkdir is blocked" + link $DIR2/$tfile-2 $DIR2/$tfile-4 + check_pdo_conflict $PID1 || error "link is blocked" + mv $DIR2/$tfile-2 $DIR2/$tfile-5 + check_pdo_conflict $PID1 || error "rename is blocked" + stat $DIR2/$tfile-3 $DIR2/$tfile-4 > /dev/null + check_pdo_conflict $PID1 || error "getattr is blocked" + rm $DIR2/$tfile-4 $DIR2/$tfile-5 + rmdir $DIR2/$tfile-3 + check_pdo_conflict $PID1 || error "unlink is blocked" + # all operations above shouldn't wait the first one + check_pdo_conflict $PID1 || error "parallel operation is blocked" + wait $PID1 + rm -r $DIR1/* + return 0 +} +run_test 40a "pdirops: create vs others ==============" + +test_40b() { +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + touch $DIR1/$tfile & + PID1=$! + sleep 1 + # open|create + touch $DIR2/$tfile-2 + check_pdo_conflict $PID1 || error "create is blocked" + mkdir $DIR2/$tfile-3 + check_pdo_conflict $PID1 || error "mkdir is blocked" + link $DIR2/$tfile-2 $DIR2/$tfile-4 + check_pdo_conflict $PID1 || error "link is blocked" + mv $DIR2/$tfile-2 $DIR2/$tfile-5 + check_pdo_conflict $PID1 || error "rename is blocked" + stat $DIR2/$tfile-3 $DIR2/$tfile-4 > /dev/null + check_pdo_conflict $PID1 || error "getattr is blocked" + rm $DIR2/$tfile-4 $DIR2/$tfile-5 + rmdir $DIR2/$tfile-3 + check_pdo_conflict $PID1 || error "unlink is blocked" + # all operations above shouldn't wait the first one + check_pdo_conflict $PID1 || error "parallel operation is blocked" + wait $PID1 + rm -r $DIR1/* + return 0 +} +run_test 40b "pdirops: open|create and others ==============" + +test_40c() { + touch $DIR1/$tfile +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + link $DIR1/$tfile $DIR1/$tfile-0 & + PID1=$! + sleep 1 + # open|create + touch $DIR2/$tfile-2 + check_pdo_conflict $PID1 || error "create is blocked" + mkdir $DIR2/$tfile-3 + check_pdo_conflict $PID1 || error "mkdir is blocked" + link $DIR2/$tfile-2 $DIR2/$tfile-4 + check_pdo_conflict $PID1 || error "link is blocked" + mv $DIR2/$tfile-2 $DIR2/$tfile-5 + check_pdo_conflict $PID1 || error "rename is blocked" + stat $DIR2/$tfile-3 $DIR2/$tfile-4 > /dev/null + check_pdo_conflict $PID1 || error "getattr is blocked" + rm $DIR2/$tfile-4 $DIR2/$tfile-5 + rmdir $DIR2/$tfile-3 + check_pdo_conflict $PID1 || error "unlink is blocked" + # all operations above shouldn't wait the first one + check_pdo_conflict $PID1 || error "parallel operation is blocked" + wait $PID1 + rm -r $DIR1/* + return 0 +} +run_test 40c "pdirops: link and others ==============" + +test_40d() { + touch $DIR1/$tfile +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + rm $DIR1/$tfile & + PID1=$! + sleep 1 + # open|create + touch $DIR2/$tfile-2 + check_pdo_conflict $PID1 || error "create is blocked" + mkdir $DIR2/$tfile-3 + check_pdo_conflict $PID1 || error "mkdir is blocked" + link $DIR2/$tfile-2 $DIR2/$tfile-4 + check_pdo_conflict $PID1 || error "link is blocked" + mv $DIR2/$tfile-2 $DIR2/$tfile-5 + check_pdo_conflict $PID1 || error "rename is blocked" + stat $DIR2/$tfile-3 $DIR2/$tfile-4 > /dev/null + check_pdo_conflict $PID1 || error "getattr is blocked" + rm $DIR2/$tfile-4 $DIR2/$tfile-5 + rmdir $DIR2/$tfile-3 + check_pdo_conflict $PID1 || error "unlink is blocked" + # all operations above shouldn't wait the first one + check_pdo_conflict $PID1 || error "parallel operation is blocked" + wait $PID1 + return 0 +} +run_test 40d "pdirops: unlink and others ==============" + +test_40e() { + touch $DIR1/$tfile +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + mv $DIR1/$tfile $DIR1/$tfile-0 & + PID1=$! + sleep 1 + # open|create + touch $DIR2/$tfile-2 + check_pdo_conflict $PID1 || error "create is blocked" + mkdir $DIR2/$tfile-3 + check_pdo_conflict $PID1 || error "mkdir is blocked" + link $DIR2/$tfile-2 $DIR2/$tfile-4 + check_pdo_conflict $PID1 || error "link is blocked" + stat $DIR2/$tfile-3 $DIR2/$tfile-4 > /dev/null + check_pdo_conflict $PID1 || error "getattr is blocked" + rm $DIR2/$tfile-4 $DIR2/$tfile-2 + rmdir $DIR2/$tfile-3 + check_pdo_conflict $PID1 || error "unlink is blocked" + # all operations above shouldn't wait the first one + check_pdo_conflict $PID1 || error "parallel operation is blocked" + wait $PID1 + rm -r $DIR1/* + return 0 +} +run_test 40e "pdirops: rename and others ==============" + +# test 41: create blocking operations +test_41a() { +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + multiop $DIR1/$tfile oO_CREAT:O_RDWR:c & + PID1=$! + sleep 1 + mkdir $DIR2/$tfile && error "mkdir must fail" + check_pdo_conflict $PID1 && { wait $PID1; echo "mkdir isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 41a "pdirops: create vs mkdir ==============" + +test_41b() { +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + multiop $DIR1/$tfile oO_CREAT:O_RDWR:c & + PID1=$! + sleep 1 + multiop $DIR2/$tfile oO_CREAT:O_EXCL:c && error "create must fail" + check_pdo_conflict $PID1 && { wait $PID1; error "create isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 41b "pdirops: create vs create ==============" + +test_41c() { + touch $DIR1/$tfile-2 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + multiop $DIR1/$tfile oO_CREAT:O_RDWR:c & + PID1=$! + sleep 1 + link $DIR2/$tfile-2 $DIR2/$tfile && error "link must fail" + check_pdo_conflict $PID1 && { wait $PID1; error "link isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 41c "pdirops: create vs link ==============" + +test_41d() { +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + multiop $DIR1/$tfile oO_CREAT:O_RDWR:c & + PID1=$! + sleep 1 + rm $DIR2/$tfile || error "unlink must succeed" + check_pdo_conflict $PID1 && { wait $PID1; error "unlink isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 41d "pdirops: create vs unlink ==============" + +test_41e() { + touch $DIR1/$tfile-2 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + multiop $DIR1/$tfile oO_CREAT:O_RDWR:c & + PID1=$! + sleep 1 + mv $DIR2/$tfile-2 $DIR2/$tfile || error "rename must succeed" + check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 41e "pdirops: create and rename (tgt) ==============" + +test_41f() { +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + multiop $DIR1/$tfile oO_CREAT:O_RDWR:c & + PID1=$! + sleep 1 + mv $DIR2/$tfile $DIR2/$tfile-2 || error "rename must succeed" + check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 41f "pdirops: create and rename (src) ==============" + +test_41g() { +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + multiop $DIR1/$tfile oO_CREAT:O_RDWR:c & + PID1=$! + sleep 1 + stat $DIR2/$tfile > /dev/null || error "stat must succeed" + check_pdo_conflict $PID1 && { wait $PID1; error "getattr isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 41g "pdirops: create vs getattr ==============" + +test_41h() { +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + multiop $DIR1/$tfile oO_CREAT:O_RDWR:c & + PID1=$! + sleep 1 + ls -lia $DIR2/ > /dev/null + check_pdo_conflict $PID1 && { wait $PID1; error "readdir isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 41h "pdirops: create vs readdir ==============" + +# test 42: unlink and blocking operations +test_42a() { +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + mkdir $DIR1/$tfile & + PID1=$! + sleep 1 + mkdir $DIR2/$tfile && error "mkdir must fail" + check_pdo_conflict $PID1 && { wait $PID1; error "mkdir isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 42a "pdirops: mkdir vs mkdir ==============" + +test_42b() { +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + mkdir $DIR1/$tfile & + PID1=$! + sleep 1 + multiop $DIR2/$tfile oO_CREAT:O_EXCL:c && error "create must fail" + check_pdo_conflict $PID1 && { wait $PID1; error "create isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 42b "pdirops: mkdir vs create ==============" + +test_42c() { + touch $DIR1/$tfile-2 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + mkdir $DIR1/$tfile & + PID1=$! + sleep 1 + link $DIR2/$tfile-2 $DIR2/$tfile && error "link must fail" + check_pdo_conflict $PID1 && { wait $PID1; error "link isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 42c "pdirops: mkdir vs link ==============" + +test_42d() { +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + mkdir $DIR1/$tfile & + PID1=$! + sleep 1 + rmdir $DIR2/$tfile || error "unlink must succeed" + check_pdo_conflict $PID1 && { wait $PID1; error "unlink isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 42d "pdirops: mkdir vs unlink ==============" + +test_42e() { + touch $DIR1/$tfile-2 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + mkdir $DIR1/$tfile & + PID1=$! + sleep 1 + mv -T $DIR2/$tfile-2 $DIR2/$tfile && error "rename must fail" + check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 42e "pdirops: mkdir and rename (tgt) ==============" + +test_42f() { +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + mkdir $DIR1/$tfile & + PID1=$! + sleep 1 + mv $DIR2/$tfile $DIR2/$tfile-2 || error "rename must succeed" + check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 42f "pdirops: mkdir and rename (src) ==============" + +test_42g() { +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + mkdir $DIR1/$tfile & + PID1=$! + sleep 1 + stat $DIR2/$tfile > /dev/null || error "stat must succeed" + check_pdo_conflict $PID1 && { wait $PID1; error "getattr isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 42g "pdirops: mkdir vs getattr ==============" + +test_42h() { +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + mkdir $DIR1/$tfile & + PID1=$! + sleep 1 + ls -lia $DIR2/ > /dev/null + check_pdo_conflict $PID1 && { wait $PID1; error "readdir isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 42h "pdirops: mkdir vs readdir ==============" + +# test 43: unlink and blocking operations +test_43a() { + touch $DIR1/$tfile +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + rm $DIR1/$tfile & + PID1=$! + sleep 1 + mkdir $DIR2/$tfile || error "mkdir must succeed" + check_pdo_conflict $PID1 && { wait $PID1; error "mkdir isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 43a "pdirops: unlink vs mkdir ==============" + +test_43b() { + touch $DIR1/$tfile +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + rm $DIR1/$tfile & + PID1=$! + sleep 1 + multiop $DIR2/$tfile oO_CREAT:O_EXCL:c || error "create must succeed" + check_pdo_conflict $PID1 && { wait $PID1; error "create isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 43b "pdirops: unlink vs create ==============" + +test_43c() { + touch $DIR1/$tfile + touch $DIR1/$tfile-2 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + rm $DIR1/$tfile & + PID1=$! + sleep 1 + link $DIR2/$tfile-2 $DIR2/$tfile || error "link must succeed" + check_pdo_conflict $PID1 && { wait $PID1; error "link isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 43c "pdirops: unlink vs link ==============" + +test_43d() { + touch $DIR1/$tfile +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + rm $DIR1/$tfile & + PID1=$! + sleep 1 + rm $DIR2/$tfile && error "unlink must fail" + check_pdo_conflict $PID1 && { wait $PID1; error "unlink isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 43d "pdirops: unlink vs unlink ==============" + +test_43e() { + touch $DIR1/$tfile + touch $DIR1/$tfile-2 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + rm $DIR1/$tfile & + PID1=$! + sleep 1 + mv -u $DIR2/$tfile-2 $DIR2/$tfile || error "rename must succeed" + check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 43e "pdirops: unlink and rename (tgt) ==============" + +test_43f() { + touch $DIR1/$tfile +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + rm $DIR1/$tfile & + PID1=$! + sleep 1 + mv $DIR2/$tfile $DIR2/$tfile-2 && error "rename must fail" + check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 43f "pdirops: unlink and rename (src) ==============" + +test_43g() { + touch $DIR1/$tfile +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + rm $DIR1/$tfile & + PID1=$! + sleep 1 + stat $DIR2/$tfile > /dev/null && error "stat must fail" + check_pdo_conflict $PID1 && { wait $PID1; error "getattr isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 43g "pdirops: unlink vs getattr ==============" + +test_43h() { + touch $DIR1/$tfile +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + rm $DIR1/$tfile & + PID1=$! + sleep 1 + ls -lia $DIR2/ > /dev/null + check_pdo_conflict $PID1 && { wait $PID1; error "readdir isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 43h "pdirops: unlink vs readdir ==============" + +# test 44: rename tgt and blocking operations +test_44a() { + touch $DIR1/$tfile-2 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK2 0x146 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000146 + mv $DIR1/$tfile-2 $DIR1/$tfile & + PID1=$! + sleep 1 + mkdir $DIR2/$tfile && error "mkdir must fail" + check_pdo_conflict $PID1 && { wait $PID1; error "mkdir isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 44a "pdirops: rename tgt vs mkdir ==============" + +test_44b() { + touch $DIR1/$tfile-2 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK2 0x146 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000146 + mv $DIR1/$tfile-2 $DIR1/$tfile & + PID1=$! + sleep 1 + multiop $DIR2/$tfile oO_CREAT:O_EXCL:c && error "create must fail" + check_pdo_conflict $PID1 && { wait $PID1; error "create isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 44b "pdirops: rename tgt vs create ==============" + +test_44c() { + touch $DIR1/$tfile-2 + touch $DIR1/$tfile-3 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK2 0x146 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000146 + mv $DIR1/$tfile-2 $DIR1/$tfile & + PID1=$! + sleep 1 + link $DIR2/$tfile-3 $DIR2/$tfile && error "link must fail" + check_pdo_conflict $PID1 && { wait $PID1; error "link isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 44c "pdirops: rename tgt vs link ==============" + +test_44d() { + touch $DIR1/$tfile-2 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK2 0x146 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000146 + mv $DIR1/$tfile-2 $DIR1/$tfile & + PID1=$! + sleep 1 + rm $DIR2/$tfile || error "unlink must succeed" + check_pdo_conflict $PID1 && { wait $PID1; error "unlink isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 44d "pdirops: rename tgt vs unlink ==============" + +test_44e() { + touch $DIR1/$tfile + touch $DIR1/$tfile-2 + touch $DIR1/$tfile-3 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK2 0x146 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000146 + mv $DIR1/$tfile-2 $DIR1/$tfile & + PID1=$! + sleep 1 + mv $DIR2/$tfile-3 $DIR2/$tfile || error "rename must succeed" + check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 44e "pdirops: rename tgt and rename (tgt) ==============" + +test_44f() { + touch $DIR1/$tfile-2 + touch $DIR1/$tfile-3 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK2 0x146 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000146 + mv $DIR1/$tfile-2 $DIR1/$tfile & + PID1=$! + sleep 1 + mv $DIR2/$tfile $DIR2/$tfile-3 || error "rename must succeed" + check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 44f "pdirops: rename tgt and rename (src) ==============" + +test_44g() { + touch $DIR1/$tfile-2 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK2 0x146 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000146 + mv $DIR1/$tfile-2 $DIR1/$tfile & + PID1=$! + sleep 1 + stat $DIR2/$tfile > /dev/null || error "stat must succeed" + check_pdo_conflict $PID1 && { wait $PID1; error "getattr isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 44g "pdirops: rename tgt vs getattr ==============" + +test_44h() { + touch $DIR1/$tfile-2 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK2 0x146 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000146 + mv $DIR1/$tfile-2 $DIR1/$tfile & + PID1=$! + sleep 1 + ls -lia $DIR2/ > /dev/null + check_pdo_conflict $PID1 && { wait $PID1; error "readdir isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 44h "pdirops: rename tgt vs readdir ==============" + +# test 45: rename src and blocking operations +test_45a() { + touch $DIR1/$tfile +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + mv $DIR1/$tfile $DIR1/$tfile-2 & + PID1=$! + sleep 1 + mkdir $DIR2/$tfile || error "mkdir must succeed" + check_pdo_conflict $PID1 && { wait $PID1; error "mkdir isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 45a "pdirops: rename src vs mkdir ==============" + +test_45b() { + touch $DIR1/$tfile +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + mv $DIR1/$tfile $DIR1/$tfile-2 & + PID1=$! + sleep 1 + multiop $DIR2/$tfile oO_CREAT:O_EXCL:c || error "create must succeed" + check_pdo_conflict $PID1 && { wait $PID1; error "create isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 45b "pdirops: rename src vs create ==============" + +test_45c() { + touch $DIR1/$tfile + touch $DIR1/$tfile-3 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + mv $DIR1/$tfile $DIR1/$tfile-2 & + PID1=$! + sleep 1 + link $DIR2/$tfile-3 $DIR2/$tfile || error "link must succeed" + check_pdo_conflict $PID1 && { wait $PID1; error "link isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 45c "pdirops: rename src vs link ==============" + +test_45d() { + touch $DIR1/$tfile +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + mv $DIR1/$tfile $DIR1/$tfile-2 & + PID1=$! + sleep 1 + rm $DIR2/$tfile && error "unlink must fail" + check_pdo_conflict $PID1 && { wait $PID1; error "unlink isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 45d "pdirops: rename src vs unlink ==============" + +test_45e() { + touch $DIR1/$tfile + touch $DIR1/$tfile-3 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + mv $DIR1/$tfile $DIR1/$tfile-2 & + PID1=$! + sleep 1 + mv $DIR2/$tfile-3 $DIR2/$tfile || error "rename must succeed" + check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 45e "pdirops: rename src and rename (tgt) ==============" + +test_45f() { + touch $DIR1/$tfile +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + mv $DIR1/$tfile $DIR1/$tfile-2 & + PID1=$! + sleep 1 + mv $DIR2/$tfile $DIR2/$tfile-3 && error "rename must fail" + check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 45f "pdirops: rename src and rename (src) ==============" + +test_45g() { + touch $DIR1/$tfile +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + mv $DIR1/$tfile $DIR1/$tfile-2 & + PID1=$! + sleep 1 + stat $DIR2/$tfile > /dev/null && "stat must fail" + check_pdo_conflict $PID1 && { wait $PID1; error "getattr isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 45g "pdirops: rename src vs getattr ==============" + +test_45h() { + touch $DIR1/$tfile +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + mv $DIR1/$tfile $DIR1/$tfile-2 & + PID1=$! + sleep 1 + ls -lia $DIR2/ > /dev/null + check_pdo_conflict $PID1 && { wait $PID1; error "readdir isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 45h "pdirops: unlink vs readdir ==============" + +# test 46: link and blocking operations +test_46a() { + touch $DIR1/$tfile-2 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + link $DIR1/$tfile-2 $DIR1/$tfile & + PID1=$! + sleep 1 + mkdir $DIR2/$tfile && error "mkdir must fail" + check_pdo_conflict $PID1 && { wait $PID1; error "mkdir isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 46a "pdirops: link vs mkdir ==============" + +test_46b() { + touch $DIR1/$tfile-2 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + link $DIR1/$tfile-2 $DIR1/$tfile & + PID1=$! + sleep 1 + multiop $DIR2/$tfile oO_CREAT:O_EXCL:c && error "create must fail" + check_pdo_conflict $PID1 && { wait $PID1; error "create isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 46b "pdirops: link vs create ==============" + +test_46c() { + touch $DIR1/$tfile-2 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + link $DIR1/$tfile-2 $DIR1/$tfile & + PID1=$! + sleep 1 + link $DIR2/$tfile $DIR2/$tfile && error "link must fail" + check_pdo_conflict $PID1 && { wait $PID1; error "link isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 46c "pdirops: link vs link ==============" + +test_46d() { + touch $DIR1/$tfile-2 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + link $DIR1/$tfile-2 $DIR1/$tfile & + PID1=$! + sleep 1 + rm $DIR2/$tfile || error "unlink must succeed" + check_pdo_conflict $PID1 && { wait $PID1; error "unlink isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 46d "pdirops: link vs unlink ==============" + +test_46e() { + touch $DIR1/$tfile-2 + touch $DIR1/$tfile-3 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + link $DIR1/$tfile-2 $DIR1/$tfile & + PID1=$! + sleep 1 + mv $DIR2/$tfile-3 $DIR2/$tfile || error "rename must succeed" + check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 46e "pdirops: link and rename (tgt) ==============" + +test_46f() { + touch $DIR1/$tfile-2 + touch $DIR1/$tfile-3 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + link $DIR1/$tfile-2 $DIR1/$tfile & + PID1=$! + sleep 1 + mv $DIR2/$tfile $DIR2/$tfile-3 || error "rename must succeed" + check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 46f "pdirops: link and rename (src) ==============" + +test_46g() { + touch $DIR1/$tfile-2 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + link $DIR1/$tfile-2 $DIR1/$tfile & + PID1=$! + sleep 1 + stat $DIR2/$tfile > /dev/null || error "stat must succeed" + check_pdo_conflict $PID1 && { wait $PID1; error "getattr isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 46g "pdirops: link vs getattr ==============" + +test_46h() { + touch $DIR1/$tfile-2 +#define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 + do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 + link $DIR1/$tfile-2 $DIR1/$tfile & + PID1=$! + sleep 1 + ls -lia $DIR2/ > /dev/null + check_pdo_conflict $PID1 && { wait $PID1; error "readdir isn't blocked"; } + rm -r $DIR1/* + return 0 +} +run_test 46h "pdirops: link vs readdir ==============" + +test_50() { + trunc_size=4096 + dd if=/dev/zero of=$DIR1/$tfile bs=1K count=10 +#define OBD_FAIL_OSC_CP_ENQ_RACE 0x410 + do_facet client "lctl set_param fail_loc=0x410" + $TRUNCATE $DIR2/$tfile $trunc_size + do_facet client "lctl set_param fail_loc=0x0" + sleep 3 + size=`stat -c %s $DIR2/$tfile` + [ $size -eq $trunc_size ] || error "wrong size" +} +run_test 50 "osc lvb attrs: enqueue vs. CP AST ==============" + log "cleanup: ======================================================" [ "$(mount | grep $MOUNT2)" ] && umount $MOUNT2