#! /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
#-----------------------------------------------------------------------
#
# creator
owner=dchinner@redhat.com

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 $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 $LOOP_MNT

	echo "*** check loop filesystem"
	 _check_xfs_filesystem $LOOP_DEV none none
}

_test_loop 50g 16m 40G
echo "*** done"
status=0
exit
