generic: add write vs fcollapse test

This test exposed a problem with XFS where it failed to write back a
partial page correctly during a fcollapse operation. This left a
stray dirty buffer on the page, and hence invalidation of the page
then failed of the fcollapse returned an EBUSY error.

Make this a generic test so that we can ensure that all filesystems
handle the case correctly. Test case originally worked out and
written by Brian Foster.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
Dave Chinner
2014-09-29 12:58:24 +10:00
parent 10b49039a5
commit cac7b427a8
3 changed files with 93 additions and 0 deletions
+73
View File
@@ -0,0 +1,73 @@
#! /bin/bash
# FS QA Test No. generic/031
#
# Test non-aligned writes against fcollapse to ensure that partial pages are
# correctly written and aren't left behind causing invalidation or data
# corruption issues.
#
#-----------------------------------------------------------------------
# Copyright (c) 2014 Red Hat, Inc. 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
#-----------------------------------------------------------------------
#
seq=`basename $0`
seqres=$RESULT_DIR/$seq
echo "QA output created by $seq"
here=`pwd`
tmp=/tmp/$$
status=1 # failure is the default!
trap "_cleanup; exit \$status" 0 1 2 3 15
_cleanup()
{
cd /
rm -f $tmp.*
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
# real QA test starts here
# Modify as appropriate.
_supported_fs generic
_supported_os IRIX Linux
_require_scratch
_require_xfs_io_command "fcollapse"
testfile=$SCRATCH_MNT/testfile
_scratch_mkfs > /dev/null 2>&1
_scratch_mount
$XFS_IO_PROG -f \
-c "pwrite 185332 55756" \
-c "fcollapse 28672 40960" \
-c "pwrite 133228 63394" \
-c "fcollapse 0 4096" \
$testfile | _filter_xfs_io
echo "==== Pre-Remount ==="
hexdump -C $testfile
_scratch_remount
echo "==== Post-Remount =="
hexdump -C $testfile
status=0
exit
+19
View File
@@ -0,0 +1,19 @@
QA output created by 031
wrote 55756/55756 bytes at offset 185332
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 63394/63394 bytes at offset 133228
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
==== Pre-Remount ===
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
0001f860 00 00 00 00 00 00 00 00 00 00 00 00 cd cd cd cd |................|
0001f870 cd cd cd cd cd cd cd cd cd cd cd cd cd cd cd cd |................|
*
0002fdc0
==== Post-Remount ==
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
0001f860 00 00 00 00 00 00 00 00 00 00 00 00 cd cd cd cd |................|
0001f870 cd cd cd cd cd cd cd cd cd cd cd cd cd cd cd cd |................|
*
0002fdc0
+1
View File
@@ -33,6 +33,7 @@
028 auto quick
029 auto quick rw
030 auto quick rw
031 auto quick prealloc rw
053 acl repair auto quick
062 attr udf auto quick
068 other auto freeze dangerous stress