#! /bin/bash
# FS QA Test No. 119
#
# Leaking reservation space in the GRH
# Test out pv#942130
# This can hang when things aren't working
#
#-----------------------------------------------------------------------
# Copyright (c) 2000-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
#
#-----------------------------------------------------------------------
#
# creator
owner=tes@crackle.melbourne.sgi.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 /
    rm -f $tmp.*
}

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

# real QA test starts here

# Modify as appropriate.
_supported_fs xfs
_supported_os IRIX Linux

_require_scratch

# this may hang
sync

export MKFS_OPTIONS="-l version=2,size=1200b,su=64k" 
export MOUNT_OPTIONS="-o logbsize=64k"
_scratch_mkfs_xfs >/dev/null

_scratch_mount

max=99
i=0
echo "start freezing and unfreezing"
while [ $i -lt $max ]; do
	xfs_freeze -f $SCRATCH_MNT
	xfs_freeze -u $SCRATCH_MNT
	echo -n .
	let i=$i+1
done
echo "done"

# success, all done
status=0
exit
