#! /bin/bash
# FSQA Test No. 137
#
# Test for NULL files problem
#
#-----------------------------------------------------------------------
# Copyright (c) 2006 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=lachlan@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()
{
    _cleanup_testdir
}

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

# real QA test starts here
_supported_fs xfs
_supported_os Linux IRIX

_setup_testdir
_require_scratch
_scratch_mkfs_xfs >/dev/null 2>&1
_scratch_mount

# create files
i=1;
while [ $i -lt 1000 ]
do
	file=$SCRATCH_MNT/$i
	xfs_io -f -c "pwrite -b 64k -S 0xff 0 64k" $file > /dev/null
	if [ $? -ne 0 ]
	then
		echo error creating/writing file $file
		exit
	fi
	let i=$i+1
done

# give the system a chance to write something out
sleep 10

src/godown $SCRATCH_MNT

umount $SCRATCH_MNT
_scratch_mount
umount $SCRATCH_MNT
if [ ! _check_scratch_fs ]
then
	echo error detected in filesystem
	exit
fi
_scratch_mount

# check file size and contents
i=1;
while [ $i -lt 1000 ]
do
	file=$SCRATCH_MNT/$i
	# if file does not exist, the create was not logged, skip it
	if [ -e $file ]
	then
		# if file size is zero it cannot be corrupt, skip it
		if [ -s $file ]
		then
			# if file has non-zero size but no extents then it's contents will be NULLs, bad.
			if xfs_bmap $file | grep 'no extents' > /dev/null
			then
				echo corrupt file $file - non-zero size but no extents
			elif xfs_bmap $file | grep 'hole' > /dev/null
			then
				echo corrupt file $file - contains holes
			else
				rm -f $file
			fi
		else
			rm -f $file
		fi
	fi
	let i=$i+1
done

status=0
exit 
