generic: add test for truncate/collapse range race

This case tests truncate/collapse range race. If the race occurs, it
will trigger a BUG_ON(). And this kernel patch has fixed this race:
    23fffa9 fs: move falloc collapse range check into the filesystem methods

Signed-off-by: Xiaoguang Wang <wangxg.fnst@cn.fujitsu.com>
Signed-off-by: Xing Gu <gux.fnst@cn.fujitsu.com>
Reviewed-by: Lukas Czerner <lczerner@redhat.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
Xiaoguang Wang
2015-04-01 11:29:56 +11:00
committed by Dave Chinner
parent 998f59d43b
commit cbc98cdd80
3 changed files with 73 additions and 0 deletions
+70
View File
@@ -0,0 +1,70 @@
#! /bin/bash
# FS QA Test No. 072
#
# Test truncate/collapse range race.
# And this test is also a regression test for kernel commit 23fffa9,
# fs: move falloc collapse range check into the filesystem methods
# If the race occurs, it will trigger a BUG_ON().
#
#-----------------------------------------------------------------------
# Copyright (c) 2015 Fujitsu. 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!
_cleanup()
{
rm -f $tmp.*
}
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_os Linux
_supported_fs generic
_require_test
_require_xfs_io_command "fcollapse"
testfile=$TEST_DIR/testfile.$seq
NCPUS=`$here/src/feature -o`
OUTER_LOOPS=$((10 * $NCPUS * $LOAD_FACTOR))
INNER_LOOPS=$((50 * $NCPUS * $LOAD_FACTOR))
# fcollapse/truncate continuously and simultaneously a same file
for ((i=1; i <= OUTER_LOOPS; i++)); do
for ((i=1; i <= INNER_LOOPS; i++)); do
$XFS_IO_PROG -f -c 'truncate 100k' \
-c 'fcollapse 0 16k' $testfile > /dev/null 2>&1
done &
for ((i=1; i <= INNER_LOOPS; i++)); do
$XFS_IO_PROG -f -c 'truncate 0' $testfile > /dev/null 2>&1
done &
done
wait
echo "Silence is golden"
status=0
exit
+2
View File
@@ -0,0 +1,2 @@
QA output created by 072
Silence is golden
+1
View File
@@ -74,6 +74,7 @@
069 rw udf auto quick
070 attr udf auto quick stress
071 auto quick prealloc
072 auto metadata stress
074 rw udf auto
075 rw udf auto quick
076 metadata rw udf auto quick stress