X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Ftests%2Fsanityn.sh;h=a4006aa95f9aad6c66cea701370e66e43de6e984;hp=789e61406b0d1783449008f30040f78958329323;hb=85ac0da36748311528aa7b89f62679f087b7445c;hpb=9a1f327a76f72c7713e53d8b354ff7f0e32be870 diff --git a/lustre/tests/sanityn.sh b/lustre/tests/sanityn.sh index 789e614..a4006aa 100755 --- a/lustre/tests/sanityn.sh +++ b/lustre/tests/sanityn.sh @@ -1460,13 +1460,21 @@ test_39d() { # LU-7310 } run_test 39d "sync write should update mtime" +pdo_sched() { + # how long 40-47 take with specific delay + # sleep 0.1 # 78s + sleep 0.2 # 103s + # sleep 0.3 # 124s + # sleep 0.5 # 164s +} + # 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 - sleep 1 # to ensure OP1 is finished on client if OP2 is blocked by OP1 + pdo_sched # to ensure OP1 is finished on client if OP2 is blocked by OP1 if [[ `ps --pid $pid | wc -l` == 1 ]]; then conflict=1 echo "Conflict" @@ -1480,12 +1488,12 @@ check_pdo_conflict() { # test 40: check non-blocking operations test_40a() { remote_mds_nodsh && skip "remote MDS with nodsh" && return + cancel_lru_locks mdc #define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 touch $DIR2 mkdir $DIR1/$tfile & - PID1=$! - sleep 1 + PID1=$!; pdo_sched touch $DIR2/$tfile-2 check_pdo_conflict $PID1 || error "create is blocked" mkdir $DIR2/$tfile-3 @@ -1502,6 +1510,7 @@ test_40a() { # all operations above shouldn't wait the first one check_pdo_conflict $PID1 || error "parallel operation is blocked" + do_facet $SINGLEMDS lctl set_param fail_loc=0 wait $PID1 rm -rf $DIR/$tfile* return 0 @@ -1510,11 +1519,11 @@ run_test 40a "pdirops: create vs others ==============" test_40b() { remote_mds_nodsh && skip "remote MDS with nodsh" && return + cancel_lru_locks mdc #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 + PID1=$!; pdo_sched # open|create touch $DIR2/$tfile-2 check_pdo_conflict $PID1 || error "create is blocked" @@ -1532,6 +1541,7 @@ test_40b() { # all operations above shouldn't wait the first one check_pdo_conflict $PID1 || error "parallel operation is blocked" + do_facet $SINGLEMDS lctl set_param fail_loc=0 wait $PID1 rm -rf $DIR/$tfile* return 0 @@ -1540,12 +1550,12 @@ run_test 40b "pdirops: open|create and others ==============" test_40c() { remote_mds_nodsh && skip "remote MDS with nodsh" && return + cancel_lru_locks mdc 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 + PID1=$!; pdo_sched # open|create touch $DIR2/$tfile-2 check_pdo_conflict $PID1 || error "create is blocked" @@ -1563,6 +1573,7 @@ test_40c() { # all operations above shouldn't wait the first one check_pdo_conflict $PID1 || error "parallel operation is blocked" + do_facet $SINGLEMDS lctl set_param fail_loc=0 wait $PID1 rm -rf $DIR/$tfile* return 0 @@ -1571,12 +1582,12 @@ run_test 40c "pdirops: link and others ==============" test_40d() { remote_mds_nodsh && skip "remote MDS with nodsh" && return + cancel_lru_locks mdc 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 + PID1=$!; pdo_sched # open|create touch $DIR2/$tfile-2 check_pdo_conflict $PID1 || error "create is blocked" @@ -1594,6 +1605,7 @@ test_40d() { # all operations above shouldn't wait the first one check_pdo_conflict $PID1 || error "parallel operation is blocked" + do_facet $SINGLEMDS lctl set_param fail_loc=0 wait $PID1 return 0 } @@ -1601,12 +1613,12 @@ run_test 40d "pdirops: unlink and others ==============" test_40e() { remote_mds_nodsh && skip "remote MDS with nodsh" && return + cancel_lru_locks mdc 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 + PID1=$!; pdo_sched # open|create touch $DIR2/$tfile-2 check_pdo_conflict $PID1 || error "create is blocked" @@ -1622,6 +1634,7 @@ test_40e() { # all operations above shouldn't wait the first one check_pdo_conflict $PID1 || error "parallel operation is blocked" + do_facet $SINGLEMDS lctl set_param fail_loc=0 wait $PID1 rm -rf $DIR/$tfile* return 0 @@ -1630,106 +1643,130 @@ run_test 40e "pdirops: rename and others ==============" # test 41: create blocking operations test_41a() { + cancel_lru_locks mdc #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" + PID1=$! ; pdo_sched + mkdir $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; echo "mkdir isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "mkdir must fail" rm -rf $DIR/$tfile* return 0 } run_test 41a "pdirops: create vs mkdir ==============" test_41b() { + cancel_lru_locks mdc #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" + PID1=$! ; pdo_sched + $MULTIOP $DIR2/$tfile oO_CREAT:O_EXCL:c & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "create isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "create must fail" rm -rf $DIR/$tfile* return 0 } run_test 41b "pdirops: create vs create ==============" test_41c() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + link $DIR2/$tfile-2 $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "link isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "link must fail" rm -rf $DIR/$tfile* return 0 } run_test 41c "pdirops: create vs link ==============" test_41d() { + cancel_lru_locks mdc #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" + PID1=$! ; pdo_sched + rm $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "unlink isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "unlink must succeed" rm -rf $DIR/$tfile* return 0 } run_test 41d "pdirops: create vs unlink ==============" test_41e() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + mv $DIR2/$tfile-2 $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "rename must succeed" rm -rf $DIR/$tfile* return 0 } run_test 41e "pdirops: create and rename (tgt) ==============" test_41f() { + cancel_lru_locks mdc #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" + PID1=$! ; pdo_sched + mv $DIR2/$tfile $DIR2/$tfile-2 & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "rename must succeed" rm -rf $DIR/$tfile* return 0 } run_test 41f "pdirops: create and rename (src) ==============" test_41g() { + cancel_lru_locks mdc #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" + PID1=$! ; pdo_sched + stat $DIR2/$tfile > /dev/null & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "getattr isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "stat must succeed" rm -rf $DIR/$tfile* return 0 } run_test 41g "pdirops: create vs getattr ==============" test_41h() { + cancel_lru_locks mdc #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 + PID1=$! ; pdo_sched + ls -lia $DIR2/ > /dev/null & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "readdir isn't blocked"; } + wait $PID2 rm -rf $DIR/$tfile* return 0 } @@ -1737,106 +1774,130 @@ run_test 41h "pdirops: create vs readdir ==============" # test 42: unlink and blocking operations test_42a() { + cancel_lru_locks mdc #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" + PID1=$! ; pdo_sched + mkdir $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "mkdir isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "mkdir must fail" rm -rf $DIR/$tfile* return 0 } run_test 42a "pdirops: mkdir vs mkdir ==============" test_42b() { + cancel_lru_locks mdc #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" + PID1=$! ; pdo_sched + $MULTIOP $DIR2/$tfile oO_CREAT:O_EXCL:c & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "create isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "create must fail" rm -rf $DIR/$tfile* return 0 } run_test 42b "pdirops: mkdir vs create ==============" test_42c() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + link $DIR2/$tfile-2 $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "link isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "link must fail" rm -rf $DIR/$tfile* return 0 } run_test 42c "pdirops: mkdir vs link ==============" test_42d() { + cancel_lru_locks mdc #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" + PID1=$! ; pdo_sched + rmdir $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "unlink isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "unlink must succeed" rm -rf $DIR/$tfile* return 0 } run_test 42d "pdirops: mkdir vs unlink ==============" test_42e() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + mv -T $DIR2/$tfile-2 $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "rename must fail" rm -rf $DIR/$tfile* return 0 } run_test 42e "pdirops: mkdir and rename (tgt) ==============" test_42f() { + cancel_lru_locks mdc #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" + PID1=$! ; pdo_sched + mv $DIR2/$tfile $DIR2/$tfile-2 & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "rename must succeed" rm -rf $DIR/$tfile* return 0 } run_test 42f "pdirops: mkdir and rename (src) ==============" test_42g() { + cancel_lru_locks mdc #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" + PID1=$! ; pdo_sched + stat $DIR2/$tfile > /dev/null & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "getattr isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "stat must succeed" rm -rf $DIR/$tfile* return 0 } run_test 42g "pdirops: mkdir vs getattr ==============" test_42h() { + cancel_lru_locks mdc #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 + PID1=$! ; pdo_sched + ls -lia $DIR2/ > /dev/null & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "readdir isn't blocked"; } + wait $PID2 rm -rf $DIR/$tfile* return 0 } @@ -1844,114 +1905,138 @@ run_test 42h "pdirops: mkdir vs readdir ==============" # test 43: unlink and blocking operations test_43a() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + mkdir $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "mkdir isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "mkdir must succeed" rm -rf $DIR/$tfile* return 0 } run_test 43a "pdirops: unlink vs mkdir ==============" test_43b() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + $MULTIOP $DIR2/$tfile oO_CREAT:O_EXCL:c & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "create isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "create must succeed" rm -rf $DIR/$tfile* return 0 } run_test 43b "pdirops: unlink vs create ==============" test_43c() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + link $DIR2/$tfile-2 $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "link isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "link must succeed" rm -rf $DIR/$tfile* return 0 } run_test 43c "pdirops: unlink vs link ==============" test_43d() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + rm $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "unlink isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "unlink must fail" rm -rf $DIR/$tfile* return 0 } run_test 43d "pdirops: unlink vs unlink ==============" test_43e() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + mv -u $DIR2/$tfile-2 $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "rename must succeed" rm -rf $DIR/$tfile* return 0 } run_test 43e "pdirops: unlink and rename (tgt) ==============" test_43f() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + mv $DIR2/$tfile $DIR2/$tfile-2 & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "rename must fail" rm -rf $DIR/$tfile* return 0 } run_test 43f "pdirops: unlink and rename (src) ==============" test_43g() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + stat $DIR2/$tfile > /dev/null & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "getattr isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "stat must fail" rm -rf $DIR/$tfile* return 0 } run_test 43g "pdirops: unlink vs getattr ==============" test_43h() { + cancel_lru_locks mdc 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 + PID1=$! ; pdo_sched + ls -lia $DIR2/ > /dev/null & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "readdir isn't blocked"; } + wait $PID2 rm -rf $DIR/$tfile* return 0 } @@ -1959,15 +2044,18 @@ run_test 43h "pdirops: unlink vs readdir ==============" test_43i() { [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return + cancel_lru_locks mdc 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 - $LFS mkdir -i 1 $DIR2/$tfile || error "remote mkdir must succeed" + PID1=$! ; pdo_sched + $LFS mkdir -i 1 $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "remote mkdir isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "remote mkdir must succeed" rm -rf $DIR/$tfile* return 0 } @@ -1975,116 +2063,141 @@ run_test 43i "pdirops: unlink vs remote mkdir" # test 44: rename tgt and blocking operations test_44a() { + cancel_lru_locks mdc 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"; } + PID1=$! ; pdo_sched + mkdir $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 + check_pdo_conflict $PID1 && { wait $PID1; date;error "mkdir isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "mkdir must fail" + date rm -rf $DIR/$tfile* return 0 } run_test 44a "pdirops: rename tgt vs mkdir ==============" test_44b() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + $MULTIOP $DIR2/$tfile oO_CREAT:O_EXCL:c & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "create isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "create must fail" rm -rf $DIR/$tfile* return 0 } run_test 44b "pdirops: rename tgt vs create ==============" test_44c() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + link $DIR2/$tfile-3 $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "link isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "link must fail" rm -rf $DIR/$tfile* return 0 } run_test 44c "pdirops: rename tgt vs link ==============" test_44d() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + rm $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "unlink isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "unlink must succeed" rm -rf $DIR/$tfile* return 0 } run_test 44d "pdirops: rename tgt vs unlink ==============" test_44e() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + mv $DIR2/$tfile-3 $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "rename must succeed" rm -rf $DIR/$tfile* return 0 } run_test 44e "pdirops: rename tgt and rename (tgt) ==============" test_44f() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + mv $DIR2/$tfile $DIR2/$tfile-3 & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "rename must succeed" rm -rf $DIR/$tfile* return 0 } run_test 44f "pdirops: rename tgt and rename (src) ==============" test_44g() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + stat $DIR2/$tfile > /dev/null & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "getattr isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "stat must succeed" rm -rf $DIR/$tfile* return 0 } run_test 44g "pdirops: rename tgt vs getattr ==============" test_44h() { + cancel_lru_locks mdc 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 + PID1=$! ; pdo_sched + ls -lia $DIR2/ > /dev/null & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "readdir isn't blocked"; } + wait $PID2 rm -rf $DIR/$tfile* return 0 } @@ -2093,15 +2206,18 @@ run_test 44h "pdirops: rename tgt vs readdir ==============" # test 44: rename tgt and blocking operations test_44i() { [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return + cancel_lru_locks mdc 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 - $LFS mkdir -i 1 $DIR2/$tfile && error "remote mkdir must fail" + PID1=$! ; pdo_sched + $LFS mkdir -i 1 $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "remote mkdir isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "remote mkdir must fail" rm -rf $DIR/$tfile* return 0 } @@ -2109,114 +2225,137 @@ run_test 44i "pdirops: rename tgt vs remote mkdir" # test 45: rename src and blocking operations test_45a() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + mkdir $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "mkdir isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "mkdir must succeed" rm -rf $DIR/$tfile* return 0 } run_test 45a "pdirops: rename src vs mkdir ==============" test_45b() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + $MULTIOP $DIR2/$tfile oO_CREAT:O_EXCL:c & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "create isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "create must succeed" rm -rf $DIR/$tfile* return 0 } run_test 45b "pdirops: rename src vs create ==============" test_45c() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + link $DIR2/$tfile-3 $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "link isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "link must succeed" rm -rf $DIR/$tfile* return 0 } run_test 45c "pdirops: rename src vs link ==============" test_45d() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + rm $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "unlink isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "unlink must fail" rm -rf $DIR/$tfile* return 0 } run_test 45d "pdirops: rename src vs unlink ==============" test_45e() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + mv $DIR2/$tfile-3 $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "rename must succeed" rm -rf $DIR/$tfile* return 0 } run_test 45e "pdirops: rename src and rename (tgt) ==============" test_45f() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + mv $DIR2/$tfile $DIR2/$tfile-3 & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "rename must fail" rm -rf $DIR/$tfile* return 0 } run_test 45f "pdirops: rename src and rename (src) ==============" test_45g() { + cancel_lru_locks mdc 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 && error "stat must fail" + PID1=$! ; pdo_sched + stat $DIR2/$tfile > /dev/null & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "getattr isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "stat must fail" rm -rf $DIR/$tfile* return 0 } run_test 45g "pdirops: rename src vs getattr ==============" test_45h() { + cancel_lru_locks mdc 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 + PID1=$! ; pdo_sched + ls -lia $DIR2/ > /dev/null & + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "readdir isn't blocked"; } + wait $PID2 rm -rf $DIR/$tfile* return 0 } @@ -2224,15 +2363,18 @@ run_test 45h "pdirops: unlink vs readdir ==============" test_45i() { [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return + cancel_lru_locks mdc 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 - $LFS mkdir -i 1 $DIR2/$tfile || error "create remote dir must succeed" + PID1=$! ; pdo_sched + $LFS mkdir -i 1 $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "create remote dir isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "create remote dir must succeed" rm -rf $DIR/$tfile* return 0 } @@ -2240,115 +2382,138 @@ run_test 45i "pdirops: rename src vs remote mkdir" # test 46: link and blocking operations test_46a() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + mkdir $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "mkdir isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "mkdir must fail" rm -rf $DIR/$tfile* return 0 } run_test 46a "pdirops: link vs mkdir ==============" test_46b() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + $MULTIOP $DIR2/$tfile oO_CREAT:O_EXCL:c & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "create isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "create must fail" rm -rf $DIR/$tfile* return 0 } run_test 46b "pdirops: link vs create ==============" test_46c() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + link $DIR2/$tfile $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "link isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "link must fail" rm -rf $DIR/$tfile* return 0 } run_test 46c "pdirops: link vs link ==============" test_46d() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + rm $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "unlink isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "unlink must succeed" rm -rf $DIR/$tfile* return 0 } run_test 46d "pdirops: link vs unlink ==============" test_46e() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + mv $DIR2/$tfile-3 $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "rename must succeed" rm -rf $DIR/$tfile* return 0 } run_test 46e "pdirops: link and rename (tgt) ==============" test_46f() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + mv $DIR2/$tfile $DIR2/$tfile-3 & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "rename must succeed" rm -rf $DIR/$tfile* return 0 } run_test 46f "pdirops: link and rename (src) ==============" test_46g() { + cancel_lru_locks mdc 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" + PID1=$! ; pdo_sched + stat $DIR2/$tfile > /dev/null & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "getattr isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "stat must succeed" rm -rf $DIR/$tfile* return 0 } run_test 46g "pdirops: link vs getattr ==============" test_46h() { + cancel_lru_locks mdc 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"; } + PID1=$! ; pdo_sched + ls -lia $DIR2/ > /dev/null & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 + check_pdo_conflict $PID1 && { wait $PID1; error "readdir isn't blocked"; } + wait $PID2 rm -rf $DIR/$tfile* return 0 } @@ -2356,15 +2521,18 @@ run_test 46h "pdirops: link vs readdir ==============" test_46i() { [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return + cancel_lru_locks mdc 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 - $LFS mkdir -i 1 $DIR2/$tfile && error "remote mkdir must fail" + PID1=$! ; pdo_sched + $LFS mkdir -i 1 $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "remote mkdir isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "remote mkdir must fail" rm -rf $DIR/$tfile* return 0 } @@ -2372,14 +2540,18 @@ run_test 46i "pdirops: link vs remote mkdir" # test 47: remote mkdir and blocking operations test_47a() { + cancel_lru_locks mdc #define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return + cancel_lru_locks mdc do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 $LFS mkdir -i 1 $DIR1/$tfile & - PID1=$! - sleep 1 - mkdir $DIR2/$tfile && error "mkdir must fail" + PID1=$! ; pdo_sched + mkdir $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "mkdir isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "mkdir must fail" rm -rf $DIR/$tfile* return 0 } @@ -2388,13 +2560,17 @@ run_test 47a "pdirops: remote mkdir vs mkdir" test_47b() { #define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return + cancel_lru_locks mdc do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 $LFS mkdir -i 1 $DIR1/$tfile & - PID1=$! - sleep 1 - multiop $DIR2/$tfile oO_CREAT:O_EXCL:c && error "create must fail" + PID1=$! ; pdo_sched + sleep 1 # please do not remove this sleep, see LU-10754 + multiop $DIR2/$tfile oO_CREAT:O_EXCL:c & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "create isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "create must fail" rm -rf $DIR/$tfile* return 0 } @@ -2402,14 +2578,17 @@ run_test 47b "pdirops: remote mkdir vs create" test_47c() { [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return + cancel_lru_locks mdc touch $DIR1/$tfile-2 #define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 $LFS mkdir -i 1 $DIR1/$tfile & - PID1=$! - sleep 1 - link $DIR2/$tfile-2 $DIR2/$tfile && error "link must fail" + PID1=$! ; pdo_sched + link $DIR2/$tfile-2 $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "link isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "link must fail" rm -rf $DIR/$tfile* return 0 } @@ -2417,14 +2596,17 @@ run_test 47c "pdirops: remote mkdir vs link" test_47d() { [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return + cancel_lru_locks mdc #define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 $LFS mkdir -i 1 $DIR1/$tfile & - PID1=$! - sleep 1 - rmdir $DIR2/$tfile || error "unlink must succeed" + PID1=$! ; pdo_sched + rmdir $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "unlink isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "rmdir must succeed" rm -rf $DIR/$tfile* return 0 } @@ -2432,15 +2614,18 @@ run_test 47d "pdirops: remote mkdir vs unlink" test_47e() { [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return + cancel_lru_locks mdc touch $DIR1/$tfile-2 #define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 $LFS mkdir -i 1 $DIR1/$tfile & - PID1=$! - sleep 1 - mv -T $DIR2/$tfile-2 $DIR2/$tfile && error "rename must fail" + PID1=$! ; pdo_sched + mv -T $DIR2/$tfile-2 $DIR2/$tfile & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + wait $PID2 ; [ $? -ne 0 ] || error "rename must fail" rm -rf $DIR/$tfile* return 0 } @@ -2448,14 +2633,17 @@ run_test 47e "pdirops: remote mkdir and rename (tgt)" test_47f() { [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return + cancel_lru_locks mdc #define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 $LFS mkdir -i 1 $DIR1/$tfile & - PID1=$! - sleep 1 - mv $DIR2/$tfile $DIR2/$tfile-2 || error "rename must succeed" + PID1=$! ; pdo_sched + mv $DIR2/$tfile $DIR2/$tfile-2 & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "rename isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "rename must succeed" rm -rf $DIR/$tfile* return 0 } @@ -2465,14 +2653,17 @@ test_47g() { [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return sync sync_all_data + cancel_lru_locks mdc #define OBD_FAIL_ONCE|OBD_FAIL_MDS_PDO_LOCK 0x145 do_facet $SINGLEMDS lctl set_param fail_loc=0x80000145 $LFS mkdir -i 1 $DIR1/$tfile & - PID1=$! - sleep 2 - stat $DIR2/$tfile > /dev/null || error "stat must succeed" + PID1=$! ; pdo_sched + stat $DIR2/$tfile > /dev/null & + PID2=$! ; pdo_sched + do_facet $SINGLEMDS lctl set_param fail_loc=0 check_pdo_conflict $PID1 && { wait $PID1; error "getattr isn't blocked"; } + wait $PID2 ; [ $? -eq 0 ] || error "stat must succeed" rm -rf $DIR/$tfile* return 0 }