#! /bin/bash
# FSQA Test No. 139
#
# 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
	xfs_io -c "truncate 32k" $file > /dev/null
	if [ $? -ne 0 ]
	then
		echo error truncating 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 
