Provide conditions to show up problem for dioread on IRIX and Linux

for pv#962005.
Merge of master-melb:xfs-cmds:28362a by kenmcd.

  Provide conditions to show up problem for dioread on IRIX and Linux
  for pv#962005.
This commit is contained in:
Tim Shimmin
2007-04-04 15:57:12 +00:00
parent 59cf9009f6
commit a5bf75d71b
3 changed files with 181 additions and 0 deletions
+120
View File
@@ -0,0 +1,120 @@
#! /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()
{
tee -a $seq.full |\
awk '$3 ~ /hole/ { print $1, $2, $3; next }
$7 ~ /10000/ { print $1, $2, "unwritten"; next }
{print $1, $2}'
}
# 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
rm -f $testfile
_test_eof_hole()
{
# on a BB boundary
xfs_io -f -c 'pwrite 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
boundary_minus1=`expr 100 \* 1024 - 1`
echo "boundary_minus1 = $boundary_minus1"
xfs_io -f -c 'pwrite 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
echo "boundary_plus1 = $boundary_plus1"
boundary_plus1=`expr 100 \* 1024 + 1`
xfs_io -f -c 'pwrite 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
xfs_io -f -c 'resvsp 0 100k' -c 'pwrite 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
boundary_minus1=`expr 100 \* 1024 - 1`
echo "boundary_minus1 = $boundary_minus1"
xfs_io -f -c "resvsp 0 $boundary_minus1" -c 'pwrite 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
boundary_plus1=`expr 100 \* 1024 + 1`
echo "boundary_plus1 = $boundary_plus1"
xfs_io -f -c "resvsp 0 $boundary_plus1" -c 'pwrite 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
+60
View File
@@ -0,0 +1,60 @@
QA output created by 164
wrote 51200/51200 bytes at offset 0
50 KiB, 13 ops
read 102400/204800 bytes at offset 0
100 KiB, 1 ops
/mnt/test/file.164:
EXT: FILE-OFFSET
0: [0..127]:
1: [128..199]: hole
boundary_minus1 = 102399
wrote 51200/51200 bytes at offset 0
50 KiB, 13 ops
read 102399/204800 bytes at offset 0
100 KiB, 1 ops
/mnt/test/file.164:
EXT: FILE-OFFSET
0: [0..127]:
1: [128..199]: hole
boundary_plus1 =
wrote 51200/51200 bytes at offset 0
50 KiB, 13 ops
read 102401/204800 bytes at offset 0
100 KiB, 1 ops
/mnt/test/file.164:
EXT: FILE-OFFSET
0: [0..127]:
1: [128..207]: hole
wrote 51200/51200 bytes at offset 0
50 KiB, 13 ops
read 102401/204800 bytes at offset 0
100 KiB, 1 ops
/mnt/test/file.164:
EXT: FILE-OFFSET
0: [0..127]:
1: [128..199]: unwritten
boundary_minus1 = 102399
wrote 51200/51200 bytes at offset 0
50 KiB, 13 ops
read 102401/204800 bytes at offset 0
100 KiB, 1 ops
/mnt/test/file.164:
EXT: FILE-OFFSET
0: [0..127]:
1: [128..199]: unwritten
boundary_plus1 = 102401
wrote 51200/51200 bytes at offset 0
50 KiB, 13 ops
read 102401/204800 bytes at offset 0
100 KiB, 1 ops
/mnt/test/file.164:
EXT: FILE-OFFSET
0: [0..127]:
1: [128..199]: unwritten
2: [200..207]: unwritten
+1
View File
@@ -243,4 +243,5 @@ pattern ajones@sgi.com
161 dmapi auto 161 dmapi auto
162 dmapi auto 162 dmapi auto
163 dmapi auto 163 dmapi auto
164 rw pattern auto
165 rw pattern auto 165 rw pattern auto