}
run_test_with_stat 11 "run for fixing bug10912 ==========="
-
-# test a deadlock between quota and journal b=11693
-test_12() {
- mkdir -p $DIR/$tdir
- chmod 0777 $DIR/$tdir
-
- [ "$(grep $DIR2 /proc/mounts)" ] || mount_client $DIR2 || \
- { skip_env "Need lustre mounted on $MOUNT2 " && retutn 0; }
-
- LIMIT=$(( $BUNIT_SZ * $(($OSTCOUNT + 1)) * 10)) # 10 bunits each sever
- TESTFILE="$DIR/$tdir/$tfile-0"
- TESTFILE2="$DIR2/$tdir/$tfile-1"
-
- wait_delete_completed
-
- echo " User quota (limit: $LIMIT kbytes)"
- $LFS setquota -u $TSTUSR -b 0 -B $LIMIT -i 0 -I 0 $DIR
-
- $LFS setstripe $TESTFILE -i 0 -c 1
- chown $TSTUSR.$TSTUSR $TESTFILE
- $LFS setstripe $TESTFILE2 -i 0 -c 1
- chown $TSTUSR2.$TSTUSR2 $TESTFILE2
-
- #define OBD_FAIL_OST_HOLD_WRITE_RPC 0x21f
- #define OBD_FAIL_SOME 0x10000000 /* fail N times */
- lustre_fail ost $((0x0000021f | 0x10000000)) 1
-
- echo " step1: write out of block quota ..."
- $RUNAS2 dd if=/dev/zero of=$TESTFILE2 bs=$BLK_SZ count=102400 &
- DDPID1=$!
- $RUNAS dd if=/dev/zero of=$TESTFILE bs=$BLK_SZ count=$(($LIMIT*2)) &
- DDPID=$!
-
- echo " step2: testing ......"
- local last_size=$(stat -c %s $TESTFILE2)
- local stall_secs=0
- local start_secs=$SECONDS
- while [ -d /proc/${DDPID1} ]; do
- local size=$(stat -c %s $TESTFILE2)
- if [ $size -eq $last_size ]; then
- stall_secs=$[stall_secs+1]
- else
- stall_secs=0
- fi
- if [ $stall_secs -gt 30 ]; then
- lustre_fail ost 0
- quota_error u $TSTUSR2 "giving up: dd stalled (i.e. made no progress) for 30 seconds!"
- fi
- last_size=$size
- sleep 1
- done
- echo "(dd_pid=$DDPID1, time=$((SECONDS-start_secs)))successful"
-
- #Recover fail_loc and dd will finish soon
- lustre_fail ost 0
-
- echo " step3: testing ......"
- count=0
- while [ true ]; do
- if ! ps -p ${DDPID} > /dev/null 2>&1; then break; fi
- count=$[count+1]
- if [ $count -gt 150 ]; then
- quota_error u $TSTUSR "dd should be finished!"
- fi
- sleep 1
- done
- echo "(dd_pid=$DDPID, time=$count)successful"
-
- rm -f $TESTFILE $TESTFILE2
- sync; sleep 3; sync;
-
- resetquota -u $TSTUSR
-}
-run_test_with_stat 12 "test a deadlock between quota and journal ==="
-
# test multiple clients write block quota b=11693
test_13() {
mkdir -p $DIR/$tdir