From 743b85a32e24cff0c77dff739691043970a0901e Mon Sep 17 00:00:00 2001 From: Alex Zhuravlev Date: Mon, 29 Apr 2019 11:21:13 +0300 Subject: [PATCH 1/1] LU-2233 tests: improve tests sanityn/40-47 sanity/40-46 usually take 800-900s which is almost a half of the whole sanityn pass. 99.(9)% of time the tests just wait to ensure specific order the operations execute in. the patch changes cfs_fail_timeout_set() so that it can interrupt waiting if fail_loc is set to 0 - polling with 1/10s frequency is used. the tests itself are modified to reset fail_loc. to be able to do so both operations (referenced as OP1 and OP2 in the tests) are run in background. once started and then ensured with pdo_sched() helper that MDS threads got to the blocking points, we can interrupt OP1 and do usual checks. ONLY=40-47 sh sanityn.sh take: 1017s before and 78s after. Signed-off-by: Alex Zhuravlev Change-Id: Ie01bd6a077333f6f57e533a73f38588a073a2381 Reviewed-on: https://review.whamcloud.com/4392 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Mike Pershin --- libcfs/libcfs/fail.c | 19 +- lustre/tests/sanityn.sh | 507 ++++++++++++++++++++++++++++++------------------ 2 files changed, 329 insertions(+), 197 deletions(-) diff --git a/libcfs/libcfs/fail.c b/libcfs/libcfs/fail.c index 12addb2..13d31ab 100644 --- a/libcfs/libcfs/fail.c +++ b/libcfs/libcfs/fail.c @@ -121,16 +121,23 @@ EXPORT_SYMBOL(__cfs_fail_check_set); int __cfs_fail_timeout_set(__u32 id, __u32 value, int ms, int set) { + ktime_t till = ktime_add_ms(ktime_get(), ms); int ret = 0; ret = __cfs_fail_check_set(id, value, set); if (ret && likely(ms > 0)) { - CERROR("cfs_fail_timeout id %x sleeping for %dms\n", - id, ms); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(cfs_time_seconds(ms) / 1000); - set_current_state(TASK_RUNNING); - CERROR("cfs_fail_timeout id %x awake\n", id); + CERROR("cfs_fail_timeout id %x sleeping for %dms\n", id, ms); + while (ktime_before(ktime_get(), till)) { + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(msecs_to_jiffies(1000) / 10); + set_current_state(TASK_RUNNING); + if (!cfs_fail_loc) { + CERROR("cfs_fail_timeout interrupted\n"); + break; + } + } + if (cfs_fail_loc) + CERROR("cfs_fail_timeout id %x awake\n", id); } return ret; } diff --git a/lustre/tests/sanityn.sh b/lustre/tests/sanityn.sh index 789e614..e22911a 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" @@ -1484,8 +1492,7 @@ test_40a() { 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 +1509,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 @@ -1513,8 +1521,7 @@ 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 + PID1=$!; pdo_sched # open|create touch $DIR2/$tfile-2 check_pdo_conflict $PID1 || error "create is blocked" @@ -1532,6 +1539,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 @@ -1544,8 +1552,7 @@ test_40c() { #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 +1570,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 @@ -1575,8 +1583,7 @@ test_40d() { #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 +1601,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 } @@ -1605,8 +1613,7 @@ test_40e() { #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 +1629,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 @@ -1633,10 +1641,12 @@ 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" + 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 } @@ -1646,10 +1656,12 @@ 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" + 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 } @@ -1660,10 +1672,12 @@ test_41c() { #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 } @@ -1673,10 +1687,12 @@ 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" + 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 } @@ -1687,10 +1703,12 @@ test_41e() { #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 } @@ -1700,10 +1718,12 @@ 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" + 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 } @@ -1713,10 +1733,12 @@ 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" + 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 } @@ -1726,10 +1748,12 @@ 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 + 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 } @@ -1740,10 +1764,12 @@ 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" + 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 } @@ -1753,10 +1779,12 @@ 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" + 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 } @@ -1767,10 +1795,12 @@ test_42c() { #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 } @@ -1780,10 +1810,12 @@ 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" + 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 } @@ -1794,10 +1826,12 @@ test_42e() { #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 } @@ -1807,10 +1841,12 @@ 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" + 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 } @@ -1820,10 +1856,12 @@ 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" + 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 } @@ -1833,10 +1871,12 @@ 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 + 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 } @@ -1848,10 +1888,12 @@ test_43a() { #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 } @@ -1862,10 +1904,12 @@ test_43b() { #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 } @@ -1877,10 +1921,12 @@ test_43c() { #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 } @@ -1891,10 +1937,12 @@ test_43d() { #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 } @@ -1906,10 +1954,12 @@ test_43e() { #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 } @@ -1920,10 +1970,12 @@ test_43f() { #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 } @@ -1934,10 +1986,12 @@ test_43g() { #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 } @@ -1948,10 +2002,12 @@ test_43h() { #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 } @@ -1963,11 +2019,13 @@ test_43i() { #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 } @@ -1979,10 +2037,13 @@ test_44a() { #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 } @@ -1993,10 +2054,12 @@ test_44b() { #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 } @@ -2008,10 +2071,12 @@ test_44c() { #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 } @@ -2022,10 +2087,12 @@ test_44d() { #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 } @@ -2038,10 +2105,12 @@ test_44e() { #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 } @@ -2053,10 +2122,12 @@ test_44f() { #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 } @@ -2067,10 +2138,12 @@ test_44g() { #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 } @@ -2081,10 +2154,12 @@ test_44h() { #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 } @@ -2097,11 +2172,13 @@ test_44i() { #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 } @@ -2113,10 +2190,12 @@ test_45a() { #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 } @@ -2127,10 +2206,12 @@ test_45b() { #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 } @@ -2142,10 +2223,12 @@ test_45c() { #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 } @@ -2156,10 +2239,12 @@ test_45d() { #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 } @@ -2171,10 +2256,12 @@ test_45e() { #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 } @@ -2185,10 +2272,12 @@ test_45f() { #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 } @@ -2199,10 +2288,12 @@ test_45g() { #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 } @@ -2213,10 +2304,11 @@ test_45h() { #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 } @@ -2228,11 +2320,13 @@ test_45i() { #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 } @@ -2244,10 +2338,12 @@ test_46a() { #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 } @@ -2258,10 +2354,12 @@ test_46b() { #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 } @@ -2272,10 +2370,12 @@ test_46c() { #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 } @@ -2286,10 +2386,12 @@ test_46d() { #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 } @@ -2301,10 +2403,12 @@ test_46e() { #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 } @@ -2316,10 +2420,12 @@ test_46f() { #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 } @@ -2330,10 +2436,12 @@ test_46g() { #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 } @@ -2344,11 +2452,12 @@ test_46h() { #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 } @@ -2360,11 +2469,13 @@ test_46i() { #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 } @@ -2376,10 +2487,12 @@ test_47a() { [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 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 } @@ -2390,11 +2503,13 @@ test_47b() { [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 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 + 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 } @@ -2406,10 +2521,12 @@ test_47c() { #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 } @@ -2420,11 +2537,13 @@ test_47d() { #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 } @@ -2436,11 +2555,13 @@ test_47e() { #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 } @@ -2451,11 +2572,13 @@ test_47f() { #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 } @@ -2468,11 +2591,13 @@ test_47g() { #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 } -- 1.8.3.1