Provide conditions to show up problem for dioread on IRIX and Linux
authorTim Shimmin <tes@sgi.com>
Wed, 4 Apr 2007 15:57:12 +0000 (15:57 +0000)
committerTim Shimmin <tes@sgi.com>
Wed, 4 Apr 2007 15:57:12 +0000 (15:57 +0000)
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.

164 [new file with mode: 0644]
164.out [new file with mode: 0644]
group

diff --git a/164 b/164
new file mode 100644 (file)
index 0000000..98b7d8c
--- /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 (file)
index 0000000..daef295
--- /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 56df72c7bc6fda1fb94825321a2e6850395b4cf9..0330745a0e6cfb614cacb3b9a3c9f06daca2d61e 100644 (file)
--- 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