#! /bin/bash
# FS QA Test No. 109
#
# ENOSPC deadlock case from Asano Masahiro.
#
#-----------------------------------------------------------------------
# Copyright (c) 2005 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	# failure is the default!
trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15

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

# real QA test starts here
_supported_fs xfs
_supported_os Linux XFS
_require_scratch

populate()
{
	# "faststart" lets us effectively skip (re-)population
	[ "X$faststart" != "X" ] && rm -f $SCRATCH_MNT/F*

	# create many small files using most available space
	echo "creating small files..."
	i=0
	while [ $i -le $files -a "X$faststart" = "X" ]; do
		file=$SCRATCH_MNT/f$i
		$XFS_IO_PROG -f -d -c 'pwrite -b 64k 0 64k' $file >/dev/null
		let i=$i+1
	done

	# remove every second file, freeing up lots of space
	echo "removing small files..."
	i=1
	while [ $i -le $files -a "X$faststart" = "X" ]; do
		rm $SCRATCH_MNT/f$i
		let i=$i+2
	done

	echo "flushing changes via umount/mount."
	_scratch_unmount
	_scratch_mount
}

allocate()
{
	# now try to hit the deadlock
	echo "starting parallel allocators..."
	i=0
	while [ $i -le 10 ]; do
		file=$SCRATCH_MNT/F$i
		{
			j=0
			while [ $j -lt 100 ]; do
				$XFS_IO_PROG -f -c 'pwrite -b 64k 0 16m' $file \
					>/dev/null 2>&1
				test -e $file && rm $file
				let j=$j+1
			done
		} &
		let i=$i+1
	done

	wait
	echo "all done!"
}

# real QA test starts here
_scratch_unmount 2>/dev/null
_scratch_mount
rm -f $seqres.full

# see if faststart is possible (and requested)
files=2000
faststart=""
if [ -n "$FASTSTART" -a -f $SCRATCH_MNT/f0 ]; then
	faststart="-N"	# causes us to skip the mkfs step
fi
_scratch_unmount

_scratch_mkfs_xfs -dsize=160m,agcount=4 $faststart | _filter_mkfs 2>$tmp.mkfs
cat $tmp.mkfs >>$seqres.full
_scratch_mount

populate
allocate
status=0
exit
