#! /bin/bash
# FS QA Test No. 256
#
# Test Full File System Hole Punching
#
#-----------------------------------------------------------------------
# Copyright (c) 2011 IBM Corporation.  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/populate
. ./common/filter
. ./common/punch

# real QA test starts here
_supported_fs generic
_supported_os Linux

_require_xfs_io_command "fpunch"
_require_scratch
_require_user
_require_test

testfile=$TEST_DIR/256.$$

# _test_full_fs_punch()
#
# This function will test that a hole may be punched
# even when the file system is full.  Reserved blocks
# should be used to allow a punch hole to proceed even
# when there is not enough blocks to further fragment the
# file. To test this, this function will fragment the file
# system by punching holes in regular intervals and filling
# the file system between punches.
#
_test_full_fs_punch()
{
	local hole_len=$1      # The length of the holes to punch
	local hole_interval=$2 # The interval between the holes
	local iterations=$3    # The number of holes to punch
	local file_name=$4     # File to punch holes in
	local block_size=$5    # File system block size
	local file_len=$(( $(( $hole_len + $hole_interval )) * $iterations ))
	local path=`dirname $file_name`
	local hole_offset=0

	if [ $# -ne 5 ]
	then
		echo "USAGE: _test_full_fs_punch hole_len hole_interval iterations file_name block_size"
		exit 1
	fi

	rm -f $file_name &> /dev/null

	$XFS_IO_PROG -f -c "pwrite 0 $file_len" \
		-c "fsync" $file_name &> /dev/null
	chmod 666 $file_name

	# All files are created as a non root user to prevent reserved blocks
	# from being consumed.
	_fill_fs $(( 1024 * 1024 * 1024 )) $path/fill $block_size 1 \
		> /dev/null 2>&1

	for (( i=0; i<$iterations; i++ ))
	do
		# This part must not be done as root in order to
		# test that reserved blocks are used when needed
		_user_do "$XFS_IO_PROG -f -c \"fpunch $hole_offset $hole_len\" $file_name"
		rc=$?
		if [ $? -ne 0 ] ; then
			echo Punch hole failed
			break
		fi

		hole_offset=$(( $hole_offset + $hole_len + $hole_interval ))

		_fill_fs $hole_len $path/fill.$i $block_size 1 > /dev/null 2>&1

	done
}

# Make a small file system to fill
_scratch_unmount &> /dev/null
_scratch_mkfs_sized $(( 1536 * 1024 * 1024 )) &> /dev/null
_scratch_mount
# Test must be able to write files with non-root permissions
chmod 777 $SCRATCH_MNT

block_size=`_get_block_size $SCRATCH_MNT`
_test_full_fs_punch $(( $block_size * 2 )) $block_size 500 $SCRATCH_MNT/252.$$ $block_size

status=0 ; exit
