diff options
Diffstat (limited to 'tests/xfs/250')
-rwxr-xr-x | tests/xfs/250 | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/tests/xfs/250 b/tests/xfs/250 new file mode 100755 index 00000000..2dd12e82 --- /dev/null +++ b/tests/xfs/250 @@ -0,0 +1,95 @@ +#! /bin/bash +# FS QA Test No. 250 +# +# Bmap btree corruption regression test +# +#----------------------------------------------------------------------- +# Copyright (c) 2011 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` +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 / + umount -d $LOOP_MNT 2>/dev/null + rm -f $LOOP_DEV + rmdir $LOOP_MNT + _cleanup_testdir +} + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +# real QA test starts here +_supported_fs xfs +_supported_os Linux +_require_loop + +LOOP_DEV=$TEST_DIR/$seq.fs +LOOP_MNT=$TEST_DIR/$seq.mnt + +_filter_io() +{ + sed -e '/.* ops; /d' +} + +# real QA test starts here + +echo "*** create loop mount point" +rmdir $LOOP_MNT 2>/dev/null +mkdir -p $LOOP_MNT || _fail "cannot create loopback mount point" + +_test_loop() +{ + size=$1 + agsize=$2 + fsize=$3 + + dparam="file,name=$LOOP_DEV,size=$size" + if [ -n "$agsize" ]; then + dparam="$dparam,agsize=$agsize" + fi + + echo "*** mkfs loop file (size=$size)" + $MKFS_XFS_PROG -d $dparam \ + | _filter_mkfs 2>/dev/null + + echo "*** mount loop filesystem" + mount -t xfs -o loop $LOOP_DEV $LOOP_MNT + + echo "*** preallocate large file" + xfs_io -f -c "resvsp 0 $fsize" $LOOP_MNT/foo | _filter_io + + echo "*** unmount loop filesystem" + umount -d $LOOP_MNT > /dev/null 2>&1 + + echo "*** check loop filesystem" + _check_xfs_filesystem $LOOP_DEV none none +} + +_test_loop 50g 16m 40G +echo "*** done" +status=0 +exit |