[BACK]Return to 164 CVS log [TXT][DIR] Up to [Development] / xfs-cmds / xfstests

File: [Development] / xfs-cmds / xfstests / 164 (download)

Revision 1.2, Thu Apr 5 15:45:28 2007 UTC (10 years, 6 months ago) by tes.longdrop.melbourne.sgi.com
Branch: MAIN
Changes since 1.1: +40 -15 lines

Output wasn't deterministic. Remove bmap output from stdout,
just have going to seq.full.
Merge of master-melb:xfs-cmds:28376a by kenmcd.

  Execute bits changed from --- to x--
  Fix up bmap output. Meant to remove the testfile on every
  test but forgot to. Also needed to truncate the files
  in the 2nd group of tests which used resvsp so that
  the length/eof was correct for the test.

#! /bin/sh
# FS QA Test No. 164
#
# To test for short dio reads on IRIX and Linux - pv#962005/962547
# http://bugworks.engr.sgi.com/query.cgi/962005
#
# In particular we are interested in dio_reads for the cases of:
# * eof on a hole
# * eof on an unwritten extent
# * eof on a sector boundary and not on a sector boundary 
#
#
#-----------------------------------------------------------------------
# Copyright (c) 2007 Silicon Graphics, Inc.  All Rights Reserved.
#-----------------------------------------------------------------------
#
# creator
owner=tes@puffy.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.*
}

_filter_io()
{
    tee -a $seq.full | sed 's/ops;.*/ops/'
}

#
#   1: [128..199]:      212280..212351    0 (212280..212351)    72 10000
#  
#  
_filter_bmap()
{
    awk '$3 ~ /hole/ { print $1, $2, $3; next }
         $7 ~ /10000/ { print $1, $2, "unwritten"; next }
         {print $1, $2}' >> $seq.full
}


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

# real QA test starts here

# Modify as appropriate.
_supported_fs xfs udf nfs
_supported_os IRIX Linux

testfile=$TEST_DIR/file.$seq

_test_eof_hole()
{
	# on a BB boundary
	rm -f $testfile
	xfs_io -f -d \
		  -c 'pwrite -b 50k 0 50k' \
		  -c 'truncate 100k' \
                  -c 'pread -b 200k 0 200k' \
		  $testfile | _filter_io
	xfs_io -c 'bmap -vp' $testfile | _filter_bmap  
	echo ""

	# on an odd byte boundary => 1 short of boundary 
	rm -f $testfile
	boundary_minus1=`expr 100 \* 1024 - 1`
	echo "boundary_minus1 = $boundary_minus1"
	xfs_io -f -d \
		  -c 'pwrite -b 50k 0 50k' \
		  -c "truncate $boundary_minus1" \
                  -c 'pread -b 200k 0 200k' \
		  $testfile | _filter_io
	xfs_io -c 'bmap -vp' $testfile | _filter_bmap  
	echo ""

	# on an odd byte boundary => 1 over boundary
	rm -f $testfile
	echo "boundary_plus1 = $boundary_plus1"
	boundary_plus1=`expr 100 \* 1024 + 1`
	xfs_io -f -d \
		  -c 'pwrite -b 50k 0 50k' \
		  -c "truncate $boundary_plus1" \
                  -c 'pread -b 200k 0 200k' \
		  $testfile | _filter_io
	xfs_io -c 'bmap -vp' $testfile | _filter_bmap  
	echo ""
}

_test_eof_unwritten_extent()
{
	# on a BB boundary
	rm -f $testfile
	xfs_io -f -d \
		  -c 'resvsp 0 100k' \
		  -c 'truncate 100k' \
		  -c 'pwrite -b 50k 0 50k' \
                  -c 'pread -b 200k 0 200k' \
		  $testfile | _filter_io
	xfs_io -c 'bmap -vp' $testfile | _filter_bmap  
	echo ""

	# on an odd byte boundary => 1 short of boundary 
	rm -f $testfile
	boundary_minus1=`expr 100 \* 1024 - 1`
	echo "boundary_minus1 = $boundary_minus1"
	xfs_io -f -d \
		  -c "resvsp 0 $boundary_minus1" \
		  -c "truncate $boundary_minus1" \
		  -c 'pwrite -b 50k 0 50k' \
                  -c 'pread -b 200k 0 200k' \
		$testfile | _filter_io
	xfs_io -c 'bmap -vp' $testfile | _filter_bmap  
	echo ""

	# on an odd byte boundary => 1 over boundary
	rm -f $testfile
	boundary_plus1=`expr 100 \* 1024 + 1`
	echo "boundary_plus1 = $boundary_plus1"
	xfs_io -f -d \
		  -c "resvsp 0 $boundary_plus1" \
		  -c "truncate $boundary_plus1" \
		  -c 'pwrite -b 50k 0 50k' \
                  -c 'pread -b 200k 0 200k' \
		  $testfile | _filter_io
	xfs_io -c 'bmap -vp' $testfile | _filter_bmap  
	echo ""
}

_test_eof_hole
_test_eof_unwritten_extent

# success, all done
status=0
exit