#! /bin/bash
# FS QA Test No. 118
#
# To test out pv#940675 crash in xfs_trans_brelse + quotas
# Without the fix, this will create an ASSERT failure in debug kernels
# and crash a non-debug kernel.
#
#-----------------------------------------------------------------------
# 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
. ./common.quota

# real QA test starts here

# Modify as appropriate.
_supported_fs xfs
_supported_os IRIX Linux

_require_scratch
_require_xfs_quota

_chowning_file()
{
	file=file.chown
	let start=$1
	let limit=$2
	let delta=$3

	cd $SCRATCH_MNT
	let count=$start
	while (( count < limit )); do
	    touch $file
	    chown $count.$count $file
	    echo -n "."
	    let count=count+delta
	done
	echo ""
}


echo "mkfs on scratch"
_scratch_mkfs_xfs >$seq.full

echo "mount with quotas"
export MOUNT_OPTIONS="-o uquota"
_scratch_mount

echo "creating quota file with holes"
_chowning_file 1000 2000 100

echo "now fill in the holes"
_chowning_file 1000 2000 1

echo "look at the final file ownership for fun"
ls -l $SCRATCH_MNT/* \
| $AWK_PROG 'NF > 2 {print $3, $4, $NF}' \
| sed "s#$SCRATCH_MNT#SCRATCH_MNT#g"

# success, all done
status=0
exit
