generic: busy loop of dd and rm test

Add a case for testing whether writing failed on NO_SPACE in a busy
loop of write and delete when disk almost full.  It is a long-term
problem since very beginning in btrfs, and has been fixed by
patchset titled "btrfs: Fix no_space on dd and rm loop" from
zhaolei@cn.fujitsu.com.

Signed-off-by: Wang Yanfeng <wangyf-fnst@cn.fujitsu.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
Wang Yanfeng
2015-08-04 14:10:49 +10:00
committed by Dave Chinner
parent 9dcfb88ac6
commit b9982f9551
3 changed files with 87 additions and 0 deletions
+65
View File
@@ -0,0 +1,65 @@
#! /bin/bash
# FS QA Test No. 102
#
# TEST busy loop of write and delete in a filesystem.
# Sometimes writes will failed on NO_SPACE when disk almost full
# in btrfs. It is long-term problem since very beginning for btrfs
#
# This issue was fixed by the patchset named:
#
# btrfs: Fix no_space on dd and rm loop < from zhaolei@cn.fujitsu.com >
#
#-----------------------------------------------------------------------
# Copyright (c) 2015 Fujitsu. All Rights Reserved.
# Author: Wang Yanfeng <wangyf-fnst@cn.fujitsu.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#-----------------------------------------------------------------------
#
seq=`basename $0`
seqres=$RESULT_DIR/$seq
echo "QA output created by $seq"
tmp=/tmp/$$
status=1
trap "exit \$status" 0 1 2 3 15
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
# real QA test starts here
_need_to_be_root
_supported_fs generic
_supported_os Linux
_require_scratch
rm -f $seqres.full
dev_size=$((512 * 1024 * 1024)) # 512MB filesystem
_scratch_mkfs_sized $dev_size >>$seqres.full 2>&1
_scratch_mount
for ((i = 0; i < 10; i++)); do
echo "loop $i" >>$seqres.full
$XFS_IO_PROG -f -c "pwrite -b 1m 0 400m" "$SCRATCH_MNT"/file | \
_filter_xfs_io | _filter_scratch
rm -f "$SCRATCH_MNT"/file
done
status=0
exit
+21
View File
@@ -0,0 +1,21 @@
QA output created by 102
wrote 419430400/419430400 bytes at offset 0
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 419430400/419430400 bytes at offset 0
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 419430400/419430400 bytes at offset 0
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 419430400/419430400 bytes at offset 0
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 419430400/419430400 bytes at offset 0
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 419430400/419430400 bytes at offset 0
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 419430400/419430400 bytes at offset 0
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 419430400/419430400 bytes at offset 0
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 419430400/419430400 bytes at offset 0
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 419430400/419430400 bytes at offset 0
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+1
View File
@@ -104,6 +104,7 @@
099 udf auto 099 udf auto
100 udf auto 100 udf auto
101 auto quick metadata 101 auto quick metadata
102 auto rw
105 acl auto quick 105 acl auto quick
112 rw aio auto quick 112 rw aio auto quick
113 rw aio auto quick 113 rw aio auto quick