Test that fsync/sync force file size changes to disk.
authorLachlan McIlroy <lachlan@sgi.com>
Mon, 20 Aug 2007 06:19:41 +0000 (06:19 +0000)
committerLachlan McIlroy <lachlan@sgi.com>
Mon, 20 Aug 2007 06:19:41 +0000 (06:19 +0000)
Merge of master-melb:xfs-cmds:29441a by kenmcd.

  Test that fsync forces file size changes to disk.

179 [new file with mode: 0644]
179.out [new file with mode: 0644]
180 [new file with mode: 0644]
180.out [new file with mode: 0644]
common.config
group

diff --git a/179 b/179
new file mode 100644 (file)
index 0000000..b0bd181
--- /dev/null
+++ b/179
@@ -0,0 +1,84 @@
+#! /bin/sh
+# FSQA Test No. 179
+#
+# Test for NULL files problem
+# test inode size is on disk after fsync
+#
+#-----------------------------------------------------------------------
+#  Copyright (c) 2006 Silicon Graphics, Inc.  All Rights Reserved.
+#-----------------------------------------------------------------------
+#
+# 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
+
+_check_files()
+{
+       # 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 then fsync failed
+                       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
+                               else
+                                       rm -f $file
+                               fi
+                       else
+                               echo file $file has zero size - sync failed
+                       fi
+               fi
+               i=`expr $i + 1`
+       done
+}
+
+# create files and fsync them
+i=1;
+while [ $i -lt 1000 ]
+do
+       file=$SCRATCH_MNT/$i
+       xfs_io -f -c "pwrite -b 32k -S 0xff 0 32k" -c "fsync" $file > /dev/null
+       i=`expr $i + 1`
+done
+
+# shutdown immediately after, then remount and test
+src/godown $SCRATCH_MNT
+umount $SCRATCH_MNT
+_scratch_mount
+_check_files
+
+status=0
+exit
diff --git a/179.out b/179.out
new file mode 100644 (file)
index 0000000..e5b0ba9
--- /dev/null
+++ b/179.out
@@ -0,0 +1 @@
+QA output created by 179
diff --git a/180 b/180
new file mode 100644 (file)
index 0000000..c95962e
--- /dev/null
+++ b/180
@@ -0,0 +1,85 @@
+#! /bin/sh
+# FSQA Test No. 179
+#
+# Test for NULL files problem
+# test inode size is on disk after sync
+#
+#-----------------------------------------------------------------------
+#  Copyright (c) 2006 Silicon Graphics, Inc.  All Rights Reserved.
+#-----------------------------------------------------------------------
+#
+# 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
+
+_check_files()
+{
+       # 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 then fsync failed
+                       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
+                               else
+                                       rm -f $file
+                               fi
+                       else
+                               echo file $file has zero size - sync failed
+                       fi
+               fi
+               i=`expr $i + 1`
+       done
+}
+
+# create files and sync them
+i=1;
+while [ $i -lt 1000 ]
+do
+       file=$SCRATCH_MNT/$i
+       xfs_io -f -c "pwrite -b 32k -S 0xff 0 32k" $file > /dev/null
+       i=`expr $i + 1`
+done
+
+# sync, then shutdown immediately after, then remount and test
+sync
+src/godown $SCRATCH_MNT
+umount $SCRATCH_MNT
+_scratch_mount
+_check_files
+
+status=0
+exit
diff --git a/180.out b/180.out
new file mode 100644 (file)
index 0000000..9035544
--- /dev/null
+++ b/180.out
@@ -0,0 +1 @@
+QA output created by 180
index b50b79bb7e20ef21af22a9485958a4f9257b799f..27bc8da1b51b1024d4c7d95508cb3093c26e5faf 100644 (file)
@@ -568,6 +568,13 @@ known_hosts()
             [ -z "$SCRATCH_DEV" ] && SCRATCH_DEV=/dev/sdb2
             [ -z "$SCRATCH_LOGDEV" ] && SCRATCH_LOGDEV=/dev/sdb4
             ;;
+        melt)
+            MODULAR=1
+            TEST_DIR=/mnt/test
+            TEST_DEV=/dev/sdb1
+            SCRATCH_MNT=/mnt/scratch
+            SCRATCH_DEV=/dev/sdb2
+            ;;
         *)
             echo "Error: need to define parameters for host $HOST"
             exit 1
diff --git a/group b/group
index e195cb615eb2774647f8231365688bfc3a71a9e8..8330f64b5415ad567af6be665916e8b428ea827b 100644 (file)
--- a/group
+++ b/group
@@ -264,3 +264,5 @@ filestreams dgc@sgi.com
 174 rw filestreams auto
 177 rw other auto
 178 mkfs other auto
+179 metadata rw auto
+180 metadata rw auto