From: Dave Chinner <david@fromorbit.com>
To: xfs@oss.sgi.com
Subject: [PATCH 1/3] xfsqa: add delayed allocation @ ENOSPC exerciser
Date: Wed, 3 Mar 2010 17:19:20 +1100 [thread overview]
Message-ID: <1267597162-12092-2-git-send-email-david@fromorbit.com> (raw)
In-Reply-To: <1267597162-12092-1-git-send-email-david@fromorbit.com>
From: Dave Chinner <dchinner@redhat.com>
When we deplete the reserve block pool or receive an error during
delayed allocation, we currently toss the page away. If that page
has delayed allocation extents on it, we can fail to remove them and
leave stale delayed llocation extents lying around on the inode.
This can, in certain circumstances, trigger errors later on when the
stale delalloc extent it found again, including tripping a BUG().
Exercise this failure path so that we get code coverage of the fix
that prevents stale delalloc mappings from being left on the inode
when pages are tossed.
This is based on a test case supplied by Lachlan McIlroy.
Signed-off-by: Dave Chinner <dchinner@redhat.com>
---
224 | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
224.out | 2 +
group | 1 +
3 files changed, 91 insertions(+), 0 deletions(-)
create mode 100644 224
create mode 100644 224.out
diff --git a/224 b/224
new file mode 100644
index 0000000..ee01c41
--- /dev/null
+++ b/224
@@ -0,0 +1,88 @@
+#! /bin/bash
+# FS QA Test No. 224
+#
+# Delayed allocation at ENOSPC test
+#
+# Derived from a test case from Lachlan McIlroy and improved to
+# reliably trigger a BUG in xfs_get_blocks(). Despite this XFS
+# focus, the test can to run on any filesystem to exercise ENOSPC
+# behaviour.
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2010 Dave Chinner. All Rights Reserved.
+#
+# 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
+#
+#-----------------------------------------------------------------------
+#
+# creator
+owner=david@fromorbit.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1 # failure is the default!
+
+_cleanup()
+{
+ killall -9 dd > /dev/null 2>&1
+ rm -f $tmp.*
+ rm -f $SCRATCH_MNT/testfile.*
+}
+
+trap "_cleanup ; exit \$status" 0 1 2 3 15
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+
+_require_scratch
+
+# make a 1GB filesystem
+_scratch_mkfs_sized `expr 1024 \* 1024 \* 1024` > $seq.full 2>&1
+_scratch_mount >> $seq.full 2>&1
+
+# set the reserved block pool to almost empty for XFS
+if [ "$FSTYP" = "xfs" ]; then
+ xfs_io -x -c "resblks 4" /mnt/scratch/ >> $seq.full 2>&1
+fi
+
+FILES=1000
+for i in `seq 0 1 $FILES`; do
+
+ # set the file size to be 10MB - that way the direct IO will always try
+ # to read at least 10MB even if only 4k was written. This allows
+ # discarded delalloc pages that would have been beyond EOF to be
+ # tripped over.
+ (
+ sleep 5
+ xfs_io -f -c "truncate 10485760" $SCRATCH_MNT/testfile.$i
+ dd if=/dev/zero of=$SCRATCH_MNT/testfile.$i bs=4k conv=notrunc
+ ) > /dev/null 2>&1 &
+done
+wait
+
+for i in `seq 0 1 $FILES`; do
+ dd of=/dev/null if=$SCRATCH_MNT/testfile.$i bs=512k iflag=direct > /dev/null 2>&1 &
+done
+wait
+echo "*** Silence is golden ***"
+status=0
+exit
diff --git a/224.out b/224.out
new file mode 100644
index 0000000..cf4fd9c
--- /dev/null
+++ b/224.out
@@ -0,0 +1,2 @@
+QA output created by 224
+*** Silence is golden ***
diff --git a/group b/group
index c66d965..5d675f0 100644
--- a/group
+++ b/group
@@ -337,3 +337,4 @@ deprecated
221 auto metadata quick
222 auto fsr ioctl quick
223 auto quick
+224 auto
--
1.6.5
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2010-03-03 6:18 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-03-03 6:19 [PATCH 0/3] xfsqa: new tests and fixes Dave Chinner
2010-03-03 6:19 ` Dave Chinner [this message]
2010-03-03 12:56 ` [PATCH 1/3] xfsqa: add delayed allocation @ ENOSPC exerciser Christoph Hellwig
2010-03-03 22:31 ` Dave Chinner
2010-03-04 7:57 ` Christoph Hellwig
2010-03-03 6:19 ` [PATCH 2/3] xfsqa: fix size specification for scratch mkfs Dave Chinner
2010-03-03 12:58 ` Christoph Hellwig
2010-03-03 16:21 ` Eric Sandeen
2010-03-03 22:56 ` Dave Chinner
2010-03-03 6:19 ` [PATCH 3/3] xfsqa: Add fiemap exerciser Dave Chinner
2010-03-03 12:58 ` Christoph Hellwig
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1267597162-12092-2-git-send-email-david@fromorbit.com \
--to=david@fromorbit.com \
--cc=xfs@oss.sgi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox