From: Lachlan McIlroy Date: Fri, 28 Sep 2007 16:06:31 +0000 (+0000) Subject: Test to expose log replay bug. X-Git-Tag: v1.1.0~440 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=da122030c52eb43bc6a85260875fab106f049ed2;p=xfstests-dev.git Test to expose log replay bug. Merge of master-melb:xfs-cmds:29801a by kenmcd. Test to expose log replay bug. --- diff --git a/182 b/182 new file mode 100644 index 00000000..eae05c3e --- /dev/null +++ b/182 @@ -0,0 +1,99 @@ +#! /bin/sh +# FSQA Test No. 182 +# +# Test for NULL files problem +# test inode size is on disk after sync - expose log replay bug +# +#----------------------------------------------------------------------- +# 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 is missing then sync failed + if [ -e $file ] + then + # if file size is not 10MB then sync failed + if [ `stat -c %s $file` -eq 32768 ] + 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 incorrect size - sync failed + fi + else + echo file $file missing - sync failed + 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 + if [ $? -ne 0 ] + then + echo error creating/writing file $file + exit + fi + i=`expr $i + 1` +done + +# sync, then shutdown immediately after, then remount and test +sync +src/godown $SCRATCH_MNT +umount $SCRATCH_MNT +_scratch_mount +umount $SCRATCH_MNT +if [ ! _check_scratch_fs ] +then + echo error detected in filesystem + exit +fi +_scratch_mount +_check_files + +status=0 +exit diff --git a/182.out b/182.out new file mode 100644 index 00000000..5e665c89 --- /dev/null +++ b/182.out @@ -0,0 +1 @@ +QA output created by 182 diff --git a/group b/group index 8b5bb0bc..6ed7069f 100644 --- a/group +++ b/group @@ -269,3 +269,4 @@ filestreams dgc@sgi.com 179 metadata rw auto 180 metadata rw auto 181 log auto +182 metadata rw auto