Whamcloud - gitweb
LU-10754 tests: sanityn/47b to sleep for 1s
[fs/lustre-release.git] / lustre / tests / sanityn.sh
index 3c4cbaa..a4006aa 100755 (executable)
@@ -31,6 +31,7 @@ CLEANUP=${CLEANUP:-:}
 SETUP=${SETUP:-:}
 init_test_env $@
 . ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
+get_lustre_env
 init_logging
 
 if [ $(facet_fstype $SINGLEMDS) = "zfs" ]; then
@@ -316,65 +317,52 @@ test_14aa() {
        MULTIPID=$!
 
        $DIR2/$tdir/$tfile && error || true
-       kill -USR1 $MULTIPID
-       wait $MULTIPID || return 2
+       kill $MULTIPID
 }
 run_test 14aa "execution of file open for write returns -ETXTBSY"
 
 test_14ab() {
        test_mkdir $DIR1/$tdir
-       cp -p $(which multiop) $DIR1/$tdir/multiop || error "cp failed"
-       MULTIOP_PROG=$DIR1/$tdir/multiop multiop_bg_pause $TMP/$tfile O_c ||
-               return 1
-       MULTIOP_PID=$!
-       $MULTIOP $DIR2/$tdir/multiop Oc && error "expected error, got success"
-       kill -USR1 $MULTIOP_PID || return 2
-       wait $MULTIOP_PID || return 3
-       rm $TMP/$tfile $DIR1/$tdir/multiop || error "removing multiop"
+       cp -p $(which sleep) $DIR1/$tdir/sleep || error "cp failed"
+       $DIR1/$tdir/sleep 60 &
+       SLEEP_PID=$!
+       $MULTIOP $DIR2/$tdir/sleep Oc && error "expected error, got success"
+       kill $SLEEP_PID
 }
 run_test 14ab "open(RDWR) of executing file returns -ETXTBSY"
 
 test_14b() { # bug 3192, 7040
        test_mkdir $DIR1/$tdir
-       cp -p $(which multiop) $DIR1/$tdir/multiop || error "cp failed"
-       MULTIOP_PROG=$DIR1/$tdir/multiop multiop_bg_pause $TMP/$tfile O_c ||
-               return 1
-       MULTIOP_PID=$!
-       $TRUNCATE $DIR2/$tdir/multiop 0 && kill -9 $MULTIOP_PID && \
+       cp -p $(which sleep) $DIR1/$tdir/sleep || error "cp failed"
+       $DIR1/$tdir/sleep 60 &
+       SLEEP_PID=$!
+       $TRUNCATE $DIR2/$tdir/sleep 60 && kill -9 $SLEEP_PID && \
                error "expected truncate error, got success"
-       kill -USR1 $MULTIOP_PID || return 2
-       wait $MULTIOP_PID || return 3
-       cmp $(which multiop) $DIR1/$tdir/multiop || error "binary changed"
-       rm $TMP/$tfile $DIR1/$tdir/multiop || error "removing multiop"
+       kill $SLEEP_PID
+       cmp $(which sleep) $DIR1/$tdir/sleep || error "binary changed"
 }
 run_test 14b "truncate of executing file returns -ETXTBSY ======"
 
 test_14c() { # bug 3430, 7040
        test_mkdir $DIR1/$tdir
-       cp -p $(which multiop) $DIR1/$tdir/multiop || error "cp failed"
-       MULTIOP_PROG=$DIR1/$tdir/multiop multiop_bg_pause $TMP/$tfile O_c ||
-               return 1
-       MULTIOP_PID=$!
-       cp /etc/hosts $DIR2/$tdir/multiop && error "expected error, got success"
-       kill -USR1 $MULTIOP_PID || return 2
-       wait $MULTIOP_PID || return 3
-       cmp $(which multiop) $DIR1/$tdir/multiop || error "binary changed"
-       rm $TMP/$tfile $DIR1/$tdir/multiop || error "removing multiop"
+       cp -p $(which sleep) $DIR1/$tdir/sleep || error "cp failed"
+       $DIR1/$tdir/sleep 60 &
+       SLEEP_PID=$!
+       cp /etc/hosts $DIR2/$tdir/sleep && error "expected error, got success"
+       kill $SLEEP_PID
+       cmp $(which sleep) $DIR1/$tdir/sleep || error "binary changed"
 }
 run_test 14c "open(O_TRUNC) of executing file return -ETXTBSY =="
 
 test_14d() { # bug 10921
        test_mkdir $DIR1/$tdir
-       cp -p $(which multiop) $DIR1/$tdir/multiop || error "cp failed"
-       MULTIOP_PROG=$DIR1/$tdir/multiop multiop_bg_pause $TMP/$tfile O_c ||
-               return 1
-       MULTIOP_PID=$!
+       cp -p $(which sleep) $DIR1/$tdir/sleep || error "cp failed"
+       $DIR1/$tdir/sleep 60 &
+       SLEEP_PID=$!
        log chmod
-       chmod 600 $DIR1/$tdir/multiop || error "chmod failed"
-       kill -USR1 $MULTIOP_PID || return 2
-       wait $MULTIOP_PID || return 3
-       cmp $(which multiop) $DIR1/$tdir/multiop || error "binary changed"
-       rm $TMP/$tfile $DIR1/$tdir/multiop || error "removing multiop"
+       chmod 600 $DIR1/$tdir/sleep || error "chmod failed"
+       kill $SLEEP_PID
+       cmp $(which sleep) $DIR1/$tdir/sleep || error "binary changed"
 }
 run_test 14d "chmod of executing file is still possible ========"
 
@@ -814,11 +802,13 @@ enable_lockless_truncate() {
 }
 
 test_32a() { # bug 11270
-       local p="$TMP/$TESTSUITE-$TESTNAME.parameters"
+       local save="$TMP/$TESTSUITE-$TESTNAME.parameters"
        local stripe_size=$(do_facet $SINGLEMDS \
                "$LCTL get_param -n lod.$(facet_svc $SINGLEMDS)*.stripesize")
 
-       save_lustre_params client "$OSC.*.lockless_truncate" > $p
+       save_lustre_params client "$OSC.*.lockless_truncate" > $save
+       # restore lockless_truncate default values on exit
+       stack_trap "restore_lustre_params < $save; rm -f $save" EXIT
        cancel_lru_locks $OSC
        enable_lockless_truncate 1
        rm -f $DIR1/$tfile
@@ -846,10 +836,7 @@ test_32a() { # bug 11270
        $CHECKSTAT -s 3000000 $DIR1/$tfile || error "wrong file size"
        [ $(calc_stats $OSC.*.${OSC}_stats lockless_truncate) -eq 0 ] ||
                error "lockless truncate disabling failed"
-       rm $DIR1/$tfile
-       # restore lockless_truncate default values
-       restore_lustre_params < $p
-       rm -f $p
+       rm -f $DIR1/$tfile
 }
 run_test 32a "lockless truncate"
 
@@ -1284,7 +1271,7 @@ test_35() { # bug 17645
        for g in $gen; do
            if ! test "$g" -eq "${generation[count]}"; then
                list=$(lctl list_param mdc.$FSNAME-MDT*-mdc-*.import)
-               local c = 0
+               local c=0
                for imp in $list; do
                        if [ $c = $count ]; then
                                break
@@ -1473,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"
@@ -1493,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
@@ -1515,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
@@ -1523,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"
@@ -1545,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
@@ -1553,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"
@@ -1576,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
@@ -1584,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"
@@ -1607,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
 }
@@ -1614,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"
@@ -1635,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
@@ -1643,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
 }
@@ -1750,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
 }
@@ -1857,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
 }
@@ -1972,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
 }
@@ -1988,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
 }
@@ -2106,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
 }
@@ -2122,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
 }
@@ -2237,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
 }
@@ -2253,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
 }
@@ -2369,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
 }
@@ -2385,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
 }
@@ -2401,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
 }
@@ -2415,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
 }
@@ -2430,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
 }
@@ -2445,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
 }
@@ -2461,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
 }
@@ -2476,14 +2651,19 @@ run_test 47f "pdirops: remote mkdir and rename (src)"
 
 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 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
 }
@@ -3122,31 +3302,47 @@ nrs_write_read() {
        chmod 777 $dir
 
        do_nodes $CLIENTS $myRUNAS \
-               dd if=/dev/zero of="$dir/nrs_r_$HOSTNAME" bs=1M count=$n ||
+               dd if=/dev/zero of="$dir/nrs_r_\$HOSTNAME" bs=1M count=$n ||
                error "dd at 0 on client failed (1)"
 
-       for ((i = 0; i < $n; i++)); do
-               do_nodes $CLIENTS $myRUNAS dd if=/dev/zero \
-                       of="$dir/nrs_w_$HOSTNAME" bs=1M seek=$i count=1 ||
-                        error "dd at ${i}MB on client failed (2)" &
-               local pids_w[$i]=$!
-       done
+       do_nodes $CLIENTS $myRUNAS \
+               "declare -a pids_w;
+               for ((i = 0; i < $n; i++)); do
+                       dd if=/dev/zero of=$dir/nrs_w_\$HOSTNAME bs=1M \
+seek=\\\$i count=1 conv=notrunc &
+                       pids_w[\\\$i]=\\\$!;
+               done;
+               rc_w=0;
+               for ((i = 0; i < $n; i++)); do
+                       wait \\\${pids_w[\\\$i]};
+                       newrc=\\\$?;
+                       [ \\\$newrc -gt \\\$rc_w ] && rc_w=\\\$newrc;
+               done;
+               exit \\\$rc_w" &
+       local pid_w=$!
        do_nodes $CLIENTS sync;
        cancel_lru_locks osc
 
-       for ((i = 0; i < $n; i++)); do
-               do_nodes $CLIENTS $myRUNAS dd if="$dir/nrs_w_$HOSTNAME" \
-                       of=/dev/zero bs=1M seek=$i count=1 > /dev/null ||
-                       error "dd at ${i}MB on client failed (3)" &
-               local pids_r[$i]=$!
-       done
+       do_nodes $CLIENTS $myRUNAS \
+               "declare -a pids_r;
+               for ((i = 0; i < $n; i++)); do
+                       dd if=$dir/nrs_r_\$HOSTNAME bs=1M of=/dev/null \
+seek=\\\$i count=1 &
+                       pids_r[\\\$i]=\\\$!;
+               done;
+               rc_r=0;
+               for ((i = 0; i < $n; i++)); do
+                       wait \\\${pids_r[\\\$i]};
+                       newrc=\\\$?;
+                       [ \\\$newrc -gt \\\$rc_r ] && rc_r=\\\$newrc;
+               done;
+               exit \\\$rc_r" &
+       local pid_r=$!
        cancel_lru_locks osc
 
-       for ((i = 0; i < $n; i++)); do
-               wait ${pids_w[$i]}
-               wait ${pids_r[$i]}
-       done
-       rm -rf $dir || error "rm -rf $dir failed"
+       wait $pid_w || error "dd (write) failed (2)"
+       wait $pid_r || error "dd (read) failed (3)"
+       rm -rvf $dir || error "rm -rf $dir failed"
 }
 
 test_77a() { #LU-3266
@@ -4475,6 +4671,9 @@ run_test 101c "Discard DoM data on close-unlink"
 # This test opens the file normally on $DIR1, which is on one mount, and then
 # opens it by handle on $DIR2, which is on a different mount.
 test_102() {
+       [ $MDS1_VERSION -lt $(version_code 2.11.57) ] &&
+               skip "Needs MDS version 2.11.57 or later"
+
        echo "Test file_handle syscalls" > $DIR/$tfile ||
                error "write failed"
        check_fhandle_syscalls $DIR/$tfile $DIR2 ||