From 53a2bd6253b1c7e313cd695364b6ff81ade42041 Mon Sep 17 00:00:00 2001 From: Lachlan McIlroy Date: Mon, 20 Aug 2007 06:19:41 +0000 Subject: [PATCH] Test that fsync/sync force file size changes to disk. Merge of master-melb:xfs-cmds:29441a by kenmcd. Test that fsync forces file size changes to disk. --- 179 | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++ 179.out | 1 + 180 | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++ 180.out | 1 + common.config | 7 +++++ group | 2 ++ 6 files changed, 180 insertions(+) create mode 100644 179 create mode 100644 179.out create mode 100644 180 create mode 100644 180.out diff --git a/179 b/179 new file mode 100644 index 00000000..b0bd1816 --- /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 index 00000000..e5b0ba9e --- /dev/null +++ b/179.out @@ -0,0 +1 @@ +QA output created by 179 diff --git a/180 b/180 new file mode 100644 index 00000000..c95962ef --- /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 index 00000000..9035544c --- /dev/null +++ b/180.out @@ -0,0 +1 @@ +QA output created by 180 diff --git a/common.config b/common.config index b50b79bb..27bc8da1 100644 --- a/common.config +++ b/common.config @@ -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 e195cb61..8330f64b 100644 --- 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 -- 2.47.3