From: Tim Shimmin Date: Wed, 4 Apr 2007 15:57:12 +0000 (+0000) Subject: Provide conditions to show up problem for dioread on IRIX and Linux X-Git-Tag: v1.1.0~506 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a5bf75d71b40a551884b79706c60f467d2eb1ff8;p=xfstests-dev.git 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. --- diff --git a/164 b/164 new file mode 100644 index 00000000..98b7d8c8 --- /dev/null +++ b/164 @@ -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 diff --git a/164.out b/164.out new file mode 100644 index 00000000..daef2952 --- /dev/null +++ b/164.out @@ -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 + diff --git a/group b/group index 56df72c7..0330745a 100644 --- a/group +++ b/group @@ -243,4 +243,5 @@ pattern ajones@sgi.com 161 dmapi auto 162 dmapi auto 163 dmapi auto +164 rw pattern auto 165 rw pattern auto