noinst_SCRIPTS += conf-sanity.sh insanity.sh lfscktest.sh oos.sh oos2.sh
noinst_SCRIPTS += llog-test.sh recovery-small.sh replay-dual.sh sanity-quota.sh
noinst_SCRIPTS += replay-ost-single.sh replay-single.sh run-llog.sh sanityN.sh
-noinst_SCRIPTS += lockorder.sh socketclient socketserver
+noinst_SCRIPTS += lockorder.sh socketclient socketserver runmultiop_bg_pause
nobase_noinst_SCRIPTS = cfg/insanity-local.sh
nobase_noinst_SCRIPTS += cfg/local.sh acl/make-tree acl/run
nobase_noinst_DATA = acl/cp.test acl/getfacl-noacl.test acl/inheritance.test
test_34a() {
setup
- do_facet client multiop $DIR/file O_c &
- sleep 0.500s
+ do_facet client "sh runmultiop_bg_pause $DIR/file O_c"
manual_umount_client
rc=$?
do_facet client killall -USR1 multiop
int rc, len, fd = -1;
int flags;
int save_errno;
+ int verbose = 0;
if (argc < 3) {
fprintf(stderr, usage, argv[0]);
for (commands = argv[2]; *commands; commands++) {
switch (*commands) {
case '_':
- if (usr1_received == 0)
+ if (usr1_received == 0) {
+ if (verbose) {
+ printf("PAUSING\n");
+ fflush(stdout);
+ }
pause();
+ }
usr1_received = 0;
signal(SIGUSR1, usr1_handler);
break;
exit(save_errno);
}
break;
+ case 'v':
+ verbose = 1;
+ break;
case 'w':
len = atoi(commands+1);
if (len <= 0)
$LCTL mark multiop $MOUNT/$tfile OS_c
do_facet mds "sysctl -w lustre.fail_loc=0x115"
clear_failloc mds $((TIMEOUT * 2)) &
- multiop $MOUNT/$tfile OS_c &
+ multiop_bg_pause $MOUNT/$tfile OS_c || return 1
PID=$!
#define OBD_FAIL_MDS_CLOSE_NET 0x115
- sleep 2
kill -USR1 $PID
echo "waiting for multiop $PID"
wait $PID || return 2
test_20a() { # bug 2983 - ldlm_handle_enqueue cleanup
mkdir -p $DIR/$tdir
- multiop $DIR/$tdir/${tfile} O_wc &
+ multiop_bg_pause $DIR/$tdir/${tfile} O_wc || return 1
MULTI_PID=$!
- sleep 1
cancel_lru_locks osc
#define OBD_FAIL_LDLM_ENQUEUE_EXTENT_ERR 0x308
do_facet ost1 sysctl -w lustre.fail_loc=0x80000308
test_21a() {
mkdir -p $DIR/$tdir-1
mkdir -p $DIR/$tdir-2
- multiop $DIR/$tdir-1/f O_c &
+ multiop_bg_pause $DIR/$tdir-1/f O_c || return 1
close_pid=$!
do_facet mds "sysctl -w lustre.fail_loc=0x80000129"
test_21b() {
mkdir -p $DIR/$tdir-1
mkdir -p $DIR/$tdir-2
- multiop $DIR/$tdir-1/f O_c &
+ multiop_bg_pause $DIR/$tdir-1/f O_c || return 1
close_pid=$!
do_facet mds "sysctl -w lustre.fail_loc=0x80000107"
test_21c() {
mkdir -p $DIR/$tdir-1
mkdir -p $DIR/$tdir-2
- multiop $DIR/$tdir-1/f O_c &
+ multiop_bg_pause $DIR/$tdir-1/f O_c || return 1
close_pid=$!
do_facet mds "sysctl -w lustre.fail_loc=0x80000107"
test_21d() {
mkdir -p $DIR/$tdir-1
mkdir -p $DIR/$tdir-2
- multiop $DIR/$tdir-1/f O_c &
+ multiop_bg_pause $DIR/$tdir-1/f O_c || return 1
pid=$!
do_facet mds "sysctl -w lustre.fail_loc=0x80000129"
test_21e() {
mkdir -p $DIR/$tdir-1
mkdir -p $DIR/$tdir-2
- multiop $DIR/$tdir-1/f O_c &
+ multiop_bg_pause $DIR/$tdir-1/f O_c || return 1
pid=$!
do_facet mds "sysctl -w lustre.fail_loc=0x80000119"
test_21f() {
mkdir -p $DIR/$tdir-1
mkdir -p $DIR/$tdir-2
- multiop $DIR/$tdir-1/f O_c &
+ multiop_bg_pause $DIR/$tdir-1/f O_c || return 1
pid=$!
do_facet mds "sysctl -w lustre.fail_loc=0x80000119"
test_21g() {
mkdir -p $DIR/$tdir-1
mkdir -p $DIR/$tdir-2
- multiop $DIR/$tdir-1/f O_c &
+ multiop_bg_pause $DIR/$tdir-1/f O_c || return 1
pid=$!
do_facet mds "sysctl -w lustre.fail_loc=0x80000119"
test_21h() {
mkdir -p $DIR/$tdir-1
mkdir -p $DIR/$tdir-2
- multiop $DIR/$tdir-1/f O_c &
+ multiop_bg_pause $DIR/$tdir-1/f O_c || return 1
pid=$!
do_facet mds "sysctl -w lustre.fail_loc=0x80000107"
run_test 22 "drop close request and do mknod"
test_23() { #b=4561
- multiop $DIR/$tfile O_c &
+ multiop_bg_pause $DIR/$tfile O_c || return 1
pid=$!
# give a chance for open
sleep 5
test_24() { # bug 2248 - eviction fails writeback but app doesn't see it
mkdir -p $DIR/$tdir
cancel_lru_locks osc
- multiop $DIR/$tdir/$tfile Owy_wyc &
+ multiop_bg_pause $DIR/$tdir/$tfile Owy_wyc || return 1
MULTI_PID=$!
- sleep 0.500s
ost_evict_client
- sleep 0.500s
kill -USR1 $MULTI_PID
wait $MULTI_PID
rc=$?
test_5() {
# multiclient version of replay_single.sh/test_8
mcreate $MOUNT1/a
- multiop $MOUNT2/a o_tSc &
+ multiop_bg_pause $MOUNT2/a o_tSc || return 1
pid=$!
- # give multiop a chance to open
- sleep 1
rm -f $MOUNT1/a
replay_barrier mds
kill -USR1 $pid
test_6() {
mcreate $MOUNT1/a
- multiop $MOUNT2/a o_c &
+ multiop_bg_pause $MOUNT2/a o_c || return 1
pid1=$!
- multiop $MOUNT1/a o_c &
+ multiop_bg_pause $MOUNT1/a o_c || return 1
pid2=$!
- # give multiop a chance to open
- sleep 1
rm -f $MOUNT1/a
replay_barrier mds
kill -USR1 $pid1
test_12() {
replay_barrier mds
- multiop $DIR/$tfile mo_c &
+ multiop_bg_pause $DIR/$tfile mo_c || return 1
MULTIPID=$!
- sleep 5
#define OBD_FAIL_LDLM_ENQUEUE 0x302
do_facet mds sysctl -w lustre.fail_loc=0x80000302
run_test 12 "open resend timeout"
test_13() {
- multiop $DIR/$tfile mo_c &
+ multiop_bg_pause $DIR/$tfile mo_c || return 1
MULTIPID=$!
- sleep 5
replay_barrier mds
test_8() {
replay_barrier mds
- multiop $DIR/$tfile mo_c &
+ multiop_bg_pause $DIR/$tfile mo_c || return 4
MULTIPID=$!
- sleep 1
fail mds
ls $DIR/$tfile
$CHECKSTAT -t file $DIR/$tfile || return 1
test_12() {
mcreate $DIR/$tfile
- multiop $DIR/$tfile o_tSc &
+ multiop_bg_pause $DIR/$tfile o_tSc || return 3
pid=$!
- # give multiop a chance to open
- sleep 1
rm -f $DIR/$tfile
replay_barrier mds
kill -USR1 $pid
# a regular open a failure
test_13() {
mcreate $DIR/$tfile
- multiop $DIR/$tfile O_wc &
+ multiop_bg_pause $DIR/$tfile O_wc || return 3
pid=$!
- # give multiop a chance to open
- sleep 1
chmod 0 $DIR/$tfile
$CHECKSTAT -p 0 $DIR/$tfile
replay_barrier mds
run_test 13 "open chmod 0 |x| write close"
test_14() {
- multiop $DIR/$tfile O_tSc &
+ multiop_bg_pause $DIR/$tfile O_tSc || return 4
pid=$!
- # give multiop a chance to open
- sleep 1
rm -f $DIR/$tfile
replay_barrier mds
kill -USR1 $pid || return 1
run_test 14 "open(O_CREAT), unlink |X| close"
test_15() {
- multiop $DIR/$tfile O_tSc &
+ multiop_bg_pause $DIR/$tfile O_tSc || return 5
pid=$!
- # give multiop a chance to open
- sleep 1
rm -f $DIR/$tfile
replay_barrier mds
touch $DIR/g11 || return 1
test_17() {
replay_barrier mds
- multiop $DIR/$tfile O_c &
+ multiop_bg_pause $DIR/$tfile O_c || return 4
pid=$!
- # give multiop a chance to open
- sleep 1
fail mds
kill -USR1 $pid || return 1
wait $pid || return 2
test_18() {
replay_barrier mds
- multiop $DIR/$tfile O_tSc &
+ multiop_bg_pause $DIR/$tfile O_tSc || return 8
pid=$!
- # give multiop a chance to open
- sleep 1
rm -f $DIR/$tfile
touch $DIR/$tfile-2 || return 1
echo "pid: $pid will close"
test_20() {
replay_barrier mds
- multiop $DIR/$tfile O_tSc &
+ multiop_bg_pause $DIR/$tfile O_tSc || return 3
pid=$!
- # give multiop a chance to open
- sleep 1
rm -f $DIR/$tfile
fail mds
test_21() {
replay_barrier mds
- multiop $DIR/$tfile O_tSc &
+ multiop_bg_pause $DIR/$tfile O_tSc || return 5
pid=$!
- # give multiop a chance to open
- sleep 1
rm -f $DIR/$tfile
touch $DIR/g11 || return 1
run_test 21 "|X| open(O_CREAT), unlink touch new, replay, close (test mds_cleanup_orphans)"
test_22() {
- multiop $DIR/$tfile O_tSc &
+ multiop_bg_pause $DIR/$tfile O_tSc || return 3
pid=$!
- # give multiop a chance to open
- sleep 1
replay_barrier mds
rm -f $DIR/$tfile
run_test 22 "open(O_CREAT), |X| unlink, replay, close (test mds_cleanup_orphans)"
test_23() {
- multiop $DIR/$tfile O_tSc &
+ multiop_bg_pause $DIR/$tfile O_tSc || return 5
pid=$!
- # give multiop a chance to open
- sleep 1
replay_barrier mds
rm -f $DIR/$tfile
run_test 23 "open(O_CREAT), |X| unlink touch new, replay, close (test mds_cleanup_orphans)"
test_24() {
- multiop $DIR/$tfile O_tSc &
+ multiop_bg_pause $DIR/$tfile O_tSc || return 3
pid=$!
- # give multiop a chance to open
- sleep 1
replay_barrier mds
fail mds
run_test 24 "open(O_CREAT), replay, unlink, close (test mds_cleanup_orphans)"
test_25() {
- multiop $DIR/$tfile O_tSc &
+ multiop_bg_pause $DIR/$tfile O_tSc || return 3
pid=$!
- # give multiop a chance to open
- sleep 1
rm -f $DIR/$tfile
replay_barrier mds
test_26() {
replay_barrier mds
- multiop $DIR/$tfile-1 O_tSc &
+ multiop_bg_pause $DIR/$tfile-1 O_tSc || return 5
pid1=$!
- multiop $DIR/$tfile-2 O_tSc &
+ multiop_bg_pause $DIR/$tfile-2 O_tSc || return 6
pid2=$!
- # give multiop a chance to open
- sleep 1
rm -f $DIR/$tfile-1
rm -f $DIR/$tfile-2
kill -USR1 $pid2
test_27() {
replay_barrier mds
- multiop $DIR/$tfile-1 O_tSc &
+ multiop_bg_pause $DIR/$tfile-1 O_tSc || return 5
pid1=$!
- multiop $DIR/$tfile-2 O_tSc &
+ multiop_bg_pause $DIR/$tfile-2 O_tSc || return 6
pid2=$!
- # give multiop a chance to open
- sleep 1
rm -f $DIR/$tfile-1
rm -f $DIR/$tfile-2
run_test 27 "|X| open(O_CREAT), unlink two, replay, close two (test mds_cleanup_orphans)"
test_28() {
- multiop $DIR/$tfile-1 O_tSc &
+ multiop_bg_pause $DIR/$tfile-1 O_tSc || return 5
pid1=$!
- multiop $DIR/$tfile-2 O_tSc &
+ multiop_bg_pause $DIR/$tfile-2 O_tSc || return 6
pid2=$!
- # give multiop a chance to open
- sleep 1
replay_barrier mds
rm -f $DIR/$tfile-1
rm -f $DIR/$tfile-2
run_test 28 "open(O_CREAT), |X| unlink two, close one, replay, close one (test mds_cleanup_orphans)"
test_29() {
- multiop $DIR/$tfile-1 O_tSc &
+ multiop_bg_pause $DIR/$tfile-1 O_tSc || return 5
pid1=$!
- multiop $DIR/$tfile-2 O_tSc &
+ multiop_bg_pause $DIR/$tfile-2 O_tSc || return 6
pid2=$!
- # give multiop a chance to open
- sleep 1
replay_barrier mds
rm -f $DIR/$tfile-1
rm -f $DIR/$tfile-2
run_test 29 "open(O_CREAT), |X| unlink two, replay, close two (test mds_cleanup_orphans)"
test_30() {
- multiop $DIR/$tfile-1 O_tSc &
+ multiop_bg_pause $DIR/$tfile-1 O_tSc || return 5
pid1=$!
- multiop $DIR/$tfile-2 O_tSc &
+ multiop_bg_pause $DIR/$tfile-2 O_tSc || return 6
pid2=$!
- # give multiop a chance to open
- sleep 1
rm -f $DIR/$tfile-1
rm -f $DIR/$tfile-2
run_test 30 "open(O_CREAT) two, unlink two, replay, close two (test mds_cleanup_orphans)"
test_31() {
- multiop $DIR/$tfile-1 O_tSc &
+ multiop_bg_pause $DIR/$tfile-1 O_tSc || return 5
pid1=$!
- multiop $DIR/$tfile-2 O_tSc &
+ multiop_bg_pause $DIR/$tfile-2 O_tSc || return 6
pid2=$!
- # give multiop a chance to open
- sleep 1
rm -f $DIR/$tfile-1
replay_barrier mds
# tests for bug 2104; completion without crashing is success. The close is
# stale, but we always return 0 for close, so the app never sees it.
test_32() {
- multiop $DIR/$tfile O_c &
+ multiop_bg_pause $DIR/$tfile O_c || return 2
pid1=$!
- multiop $DIR/$tfile O_c &
+ multiop_bg_pause $DIR/$tfile O_c || return 3
pid2=$!
- # give multiop a chance to open
- sleep 1
mds_evict_client
df $MOUNT || sleep 1 && df $MOUNT || return 1
kill -USR1 $pid1
run_test 33 "abort recovery before client does replay"
test_34() {
- multiop $DIR/$tfile O_c &
+ multiop_bg_pause $DIR/$tfile O_c || return 2
pid=$!
- # give multiop a chance to open
- sleep 1
rm -f $DIR/$tfile
replay_barrier mds
# directory orphans can't be unlinked from PENDING directory
test_37() {
rmdir $DIR/$tfile 2>/dev/null
- multiop $DIR/$tfile dD_c &
+ multiop_bg_pause $DIR/$tfile dD_c || return 2
pid=$!
- # give multiop a chance to open
- sleep 1
rmdir $DIR/$tfile
replay_barrier mds
[ "$mdcdev" ] || exit 2
$LCTL --device $mdcdev recover
- multiop $DIR/$tfile O_c &
+ multiop_bg_pause $DIR/$tfile O_c || return 1
pid=$!
- sleep 1
# This will cause the CLOSE to fail before even
# allocating a reply buffer
--- /dev/null
+#!/bin/bash
+
+# Run multiop in the background, but wait for it to print
+# "PAUSING" to its stdout before returning from this function.
+
+PTLDEBUG=${PTLDEBUG:--1}
+LUSTRE=${LUSTRE:-`dirname $0`/..}
+. $LUSTRE/tests/test-framework.sh
+
+multiop_bg_pause $*
+exit $?
test_24q() {
mkdir $DIR/R13{a,b}
DIRINO=`ls -lid $DIR/R13a | awk '{ print $1 }'`
- multiop $DIR/R13b D_c &
+ multiop_bg_pause $DIR/R13b D_c || return 1
MULTIPID=$!
- usleep 500
mrename $DIR/R13a $DIR/R13b
$CHECKSTAT -a $DIR/R13a || error
test_31c() {
touch $DIR/f31 || error
ln $DIR/f31 $DIR/f31c || error
- multiop $DIR/f31 O_uc &
+ multiop_bg_pause $DIR/f31 O_uc || return 1
MULTIPID=$!
multiop $DIR/f31c Ouc
- usleep 500
kill -USR1 $MULTIPID
wait $MULTIPID
}
cp /etc/hosts $DIR/d31f
ls -l $DIR/d31f
$GETSTRIPE $DIR/d31f/hosts
- multiop $DIR/d31f D_c &
+ multiop_bg_pause $DIR/d31f D_c || return 1
MULTIPID=$!
- sleep 1
-
rm -rv $DIR/d31f || error "first of $DIR/d31f"
mkdir $DIR/d31f
$SETSTRIPE $DIR/d31f -s 1048576 -c 1
cp /etc/hosts $DIR/d31f
ls -l $DIR/d31f
- $DIR/d31f/hosts
- multiop $DIR/d31f D_c &
+ $DIR/d31f/hosts
+ multiop_bg_pause $DIR/d31f D_c || return 1
MULTIPID2=$!
- sleep 6
-
kill -USR1 $MULTIPID || error "first opendir $MULTIPID not running"
wait $MULTIPID || error "first opendir $MULTIPID failed"
test_43a() {
mkdir -p $DIR/d43
cp -p `which multiop` $DIR/d43/multiop
- $DIR/d43/multiop $TMP/test43.junk O_c &
- MULTIPID=$!
- sleep 1
+ MULTIOP_PROG=$DIR/d43/multiop multiop_bg_pause $TMP/test43.junk O_c || return 1
+ MULTIOP_PID=$!
multiop $DIR/d43/multiop Oc && error "expected error, got success"
- kill -USR1 $MULTIPID || return 2
- wait $MULTIPID || return 3
+ kill -USR1 $MULTIOP_PID || return 2
+ wait $MULTIOP_PID || return 3
rm $TMP/test43.junk
}
run_test 43a "open(RDWR) of file being executed should return -ETXTBSY"
test_43b() {
mkdir -p $DIR/d43
cp -p `which multiop` $DIR/d43/multiop
- $DIR/d43/multiop $TMP/test43.junk O_c &
- MULTIPID=$!
- sleep 1
+ MULTIOP_PROG=$DIR/d43/multiop multiop_bg_pause $TMP/test43.junk O_c || return 1
+ MULTIOP_PID=$!
truncate $DIR/d43/multiop 0 && error "expected error, got success"
- kill -USR1 $MULTIPID || return 2
- wait $MULTIPID || return 3
+ kill -USR1 $MULTIOP_PID || return 2
+ wait $MULTIOP_PID || return 3
rm $TMP/test43.junk
}
run_test 43b "truncate of file being executed should return -ETXTBSY"
test_73() {
mkdir $DIR/d73-1
mkdir $DIR/d73-2
- multiop $DIR/d73-1/f73-1 O_c &
+ multiop_bg_pause $DIR/d73-1/f73-1 O_c || return 1
pid1=$!
- #give multiop a chance to open
- usleep 500
#define OBD_FAIL_MDS_PAUSE_OPEN 0x129
sysctl -w lustre.fail_loc=0x80000129
test_11() {
mkdir $DIR1/d11
- multiop $DIR1/d11/f O_c &
+ multiop_bg_pause $DIR1/d11/f O_c || return 1
MULTIPID=$!
- sleep 0.200s
cp -p /bin/ls $DIR1/d11/f
$DIR2/d11/f
RC=$?
test_14a() {
mkdir -p $DIR1/d14
cp -p `which multiop` $DIR1/d14/multiop || error "cp failed"
- $DIR1/d14/multiop $TMP/test14.junk O_c &
- MULTIPID=$!
- sleep 1
+ MULTIOP_PROG=$DIR1/d14/multiop multiop_bg_pause $TMP/test14.junk O_c || return 1
+ MULTIOP_PID=$!
multiop $DIR2/d14/multiop Oc && error "expected error, got success"
- kill -USR1 $MULTIPID || return 2
- wait $MULTIPID || return 3
+ kill -USR1 $MULTIOP_PID || return 2
+ wait $MULTIOP_PID || return 3
rm $TMP/test14.junk $DIR1/d14/multiop || error "removing multiop"
}
run_test 14a "open(RDWR) of executing file returns -ETXTBSY ===="
test_14b() { # bug 3192, 7040
mkdir -p $DIR1/d14
cp -p `which multiop` $DIR1/d14/multiop || error "cp failed"
- $DIR1/d14/multiop $TMP/test14.junk O_c &
- MULTIPID=$!
- sleep 1
- truncate $DIR2/d14/multiop 0 && kill -9 $MULTIPID && \
+ MULTIOP_PROG=$DIR1/d14/multiop multiop_bg_pause $TMP/test14.junk O_c || return 1
+ MULTIOP_PID=$!
+ truncate $DIR2/d14/multiop 0 && kill -9 $MULTIOP_PID && \
error "expected truncate error, got success"
- kill -USR1 $MULTIPID || return 2
- wait $MULTIPID || return 3
+ kill -USR1 $MULTIOP_PID || return 2
+ wait $MULTIOP_PID || return 3
cmp `which multiop` $DIR1/d14/multiop || error "binary changed"
rm $TMP/test14.junk $DIR1/d14/multiop || error "removing multiop"
}
test_14c() { # bug 3430, 7040
mkdir -p $DIR1/d14
cp -p `which multiop` $DIR1/d14/multiop || error "cp failed"
- $DIR1/d14/multiop $TMP/test14.junk O_c &
- MULTIPID=$!
- sleep 1
+ MULTIOP_PROG=$DIR1/d14/multiop multiop_bg_pause $TMP/test14.junk O_c || return 1
+ MULTIOP_PID=$!
cp /etc/hosts $DIR2/d14/multiop && error "expected error, got success"
- kill -USR1 $MULTIPID || return 2
- wait $MULTIPID || return 3
+ kill -USR1 $MULTIOP_PID || return 2
+ wait $MULTIOP_PID || return 3
cmp `which multiop` $DIR1/d14/multiop || error "binary changed"
rm $TMP/test14.junk $DIR1/d14/multiop || error "removing multiop"
}
test_14d() { # bug 10921
mkdir -p $DIR1/d14
cp -p `which multiop` $DIR1/d14/multiop || error "cp failed"
- $DIR1/d14/multiop $TMP/test14.junk O_c &
- MULTIPID=$!
- sleep 1
+ MULTIOP_PROG=$DIR1/d14/multiop multiop_bg_pause $TMP/test14.junk O_c || return 1
+ MULTIOP_PID=$!
log chmod
chmod 600 $DIR1/d14/multiop || error "chmod failed"
- kill -USR1 $MULTIPID || return 2
- wait $MULTIPID || return 3
+ kill -USR1 $MULTIOP_PID || return 2
+ wait $MULTIOP_PID || return 3
cmp `which multiop` $DIR1/d14/multiop || error "binary changed"
rm $TMP/test14.junk $DIR1/d14/multiop || error "removing multiop"
}
time1=`date +%s`
sleep 2
- multiop $DIR1/f23 or20_c &
+ multiop_bg_pause $DIR1/f23 or20_c || return 1
MULTIPID=$!
- sleep 2
time2=`stat -c "%X" $DIR2/f23`
if (( $time2 <= $time1 )); then
Please set RUNAS_ID to some UID which exists on MDS and client or
add user $myRUNAS_ID:$myRUNAS_ID on these nodes."
}
+
+# Run multiop in the background, but wait for it to print
+# "PAUSING" to its stdout before returning from this function.
+multiop_bg_pause() {
+ MULTIOP_PROG=${MULTIOP_PROG:-multiop}
+ FILE=$1
+ ARGS=$2
+
+ TMPPIPE=/tmp/multiop_open_wait_pipe.$$
+ mkfifo $TMPPIPE
+
+ echo "$MULTIOP_PROG $FILE v$ARGS"
+ $MULTIOP_PROG $FILE v$ARGS > $TMPPIPE &
+
+ echo "TMPPIPE=${TMPPIPE}"
+ read -t 60 multiop_output < $TMPPIPE
+ if [ $? -ne 0 ]; then
+ rm -f $TMPPIPE
+ return 1
+ fi
+ rm -f $TMPPIPE
+ if [ "$multiop_output" != "PAUSING" ]; then
+ echo "Incorrect multiop output: $multiop_output"
+ kill -9 $PID
+ return 1
+ fi
+
+ return 0
+}