#! /bin/bash
# FS QA Test No. 083
#
# Exercise filesystem full behaviour - run numerous fsstress
# processes in write mode on a small filesystem.  NB: delayed
# allocate flushing is quite deadlock prone at the filesystem
# full boundary due to the fact that we will retry allocation
# several times after flushing, before giving back ENOSPC.
#
# Note that this test will intentionally cause console msgs of form:
#     dksc0d1s4: Process [fsstress] ran out of disk space
#     dksc0d1s4: Process [fsstress] ran out of disk space
#     dksc0d1s4: Process [fsstress] ran out of disk space
#
#-----------------------------------------------------------------------
# Copyright (c) 2000-2003 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
#
#-----------------------------------------------------------------------
#

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

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

_cleanup()
{
	echo "*** unmount"
	_scratch_unmount 2>/dev/null
	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_fs generic
_supported_os Linux

_require_scratch
_require_no_large_scratch_dev

rm -f $seqres.full

workout()
{
	fsz=$1
	ags=$2
	procs=$3
	nops=$4

	_scratch_unmount >/dev/null 2>&1
	echo "*** mkfs -dsize=$fsz,agcount=$ags"    >>$seqres.full
	echo ""                                     >>$seqres.full
	if [ $FSTYP = xfs ]
	then
		_scratch_mkfs_xfs -dsize=$fsz,agcount=$ags  >>$seqres.full 2>&1 \
			|| _fail "size=$fsz,agcount=$ags mkfs failed"
	else
		_scratch_mkfs_sized $fsz >>$seqres.full 2>&1 \
			|| _fail "size=$fsz mkfs failed"
	fi
	_scratch_mount

	# -w ensures that the only ops are ones which cause write I/O
	FSSTRESS_ARGS=`_scale_fsstress_args -d $SCRATCH_MNT -w -p $procs -n $nops $FSSTRESS_AVOID`
	$FSSTRESS_PROG $FSSTRESS_ARGS >>$seqres.full
}

echo "*** test out-of-space handling for random write operations"

filesize=`expr 100 \* 1024 \* 1024`
agcount=6
numprocs=15
numops=1500

workout $filesize $agcount $numprocs $numops

echo "*** done"
status=0
exit
