#! /bin/bash
# FS QA Test No. 078
#
# Check several growfs corner cases
#
#-----------------------------------------------------------------------
# Copyright (c) 2000-2003,2006 Silicon Graphics, 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=nathans@sgi.com

seq=`basename $0`
echo "QA output created by $seq"

here=`pwd`
tmp=/tmp/$$
status=1

trap "_cleanup; rm -f $tmp.*; exit \$status" 0 1 2 3 15

_cleanup()
{
    cd /
    rm -f $tmp.*
    umount $LOOP_MNT 2>/dev/null
    rmdir $LOOP_MNT
    _cleanup_testdir
}

# get standard environment, filters and checks
. ./common.rc
. ./common.filter

# loop devices are available in Linux only
_supported_fs xfs
_supported_os Linux

# Must have loop device
_require_loop

LOOP_IMG=$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"

_grow_loop()
{
	original=$1
	new_size=$2
	bsize=$3
	check=$4
	agsize=$5

	dparam="file,name=$LOOP_IMG,size=$original"
	if [ -n "$agsize" ]; then
		dparam="$dparam,agsize=$agsize"
	fi

	echo
	echo "=== GROWFS (from $original to $new_size, $bsize blocksize)"
	echo

	echo "*** mkfs loop file (size=$original)"
	$MKFS_XFS_PROG -b size=$bsize -d $dparam \
		| _filter_mkfs 2>/dev/null

	echo "*** extend loop file"
	$XFS_IO_PROG -c "pwrite $new_size $bsize" $LOOP_IMG | _filter_io
	echo "*** mount loop filesystem"
	mount -t xfs -o loop $LOOP_IMG $LOOP_MNT

	echo "*** grow loop filesystem"
	#xfs_growfs $LOOP_MNT 2>&1 | grep -e "^data" #| _filter_growfs 2>/dev/null
	$XFS_GROWFS_PROG $LOOP_MNT 2>&1 |  _filter_growfs 2>&1

	echo "*** unmount"
	umount $LOOP_MNT

	# Large grows takes forever to check..
	if [ "$check" -gt "0" ]
	then
		echo "*** check"
		LOOP_DEV=`losetup -f`
		losetup $LOOP_DEV $LOOP_IMG
		 _check_xfs_filesystem $LOOP_DEV none none
		losetup -d $LOOP_DEV
	fi

	rm -f $LOOP_IMG
}

# Wes' problem sizes...
_grow_loop 168024b 1376452608 4096 1

# Some other blocksize cases...
_grow_loop 168024b 1376452608 2048 1
_grow_loop 168024b 1376452608 512 1 16m
_grow_loop 168024b 688230400 1024 1


# Other corner cases suggested by dgc
# also the following doesn't check if the filesystem is consistent.
#  - grow 1TB by 1.5TB (control)
_grow_loop 1t 2500g 4096 0

#  - grow 1TB by 2.5TB (grow by > 2TB)
_grow_loop 1t 3500g 4096 0

#  - grow 1TB by 3.5TB (grow past 4TB)
_grow_loop 1t 4500g 4096 0

#  - grow 1TB by 4.5TB (grow by > 4TB)
_grow_loop 1t 5500g 4096 0

#  - grow 1TB by 7.5TB (grow past 8TB)
_grow_loop 1t 8500g 4096 0

#  - grow 1TB by 8.5TB (grow by > 8TB)
_grow_loop 1t 9500g 4096 0

#  - grow 1TB by 14.5TB (grow by > 8TB)
_grow_loop 1t 15500g 4096 0

#  - grow 1TB by 15TB (grow to 16TB)
_grow_loop 1t 16000g 4096 0

# It would be nice to go on, but this would require a totally new test in order
# to take care of 64-bit machines.

echo "*** all done"
status=0
exit
