xfstests 311: test fsync with dm flakey V4

This test sets up a dm flakey target and then runs my fsync tester I've been
using to verify btrfs's fsync() is working properly.  It will create a dm flakey
device, mount it, run my test, make the flakey device start dropping writes, and
then unmount the fs.  Then we mount it back up and make sure the md5sums match
and then run fsck on the device to make sure we got a consistent fs.  I used the
output from a run on BTRFS since it's the only one that passes this test
properly.  I verified each test manually to make sure they were in fact valid
files.  XFS and Ext4 both fail this test in one way or another.

Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Acked-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Rich Johnston <rjohnston@sgi.com>
[rjohnston@sgi.com changed syncfs() to sync() for older kernels]
Signed-off-by: Rich Johnston <rjohnston@sgi.com>
This commit is contained in:
Josef Bacik
2013-04-26 19:13:59 +00:00
committed by Rich Johnston
parent 7f622f44b6
commit dd3b526831
8 changed files with 1045 additions and 8 deletions
+1
View File
@@ -178,6 +178,7 @@ export FILEFRAG_PROG="`set_prog_path filefrag`"
export E4DEFRAG_PROG="`set_prog_path e4defrag`" export E4DEFRAG_PROG="`set_prog_path e4defrag`"
export LOGGER_PROG="`set_prog_path logger`" export LOGGER_PROG="`set_prog_path logger`"
export DBENCH_PROG="`set_prog_path dbench`" export DBENCH_PROG="`set_prog_path dbench`"
export DMSETUP_PROG="`set_prog_path dmsetup`"
# Generate a comparable xfsprogs version number in the form of # Generate a comparable xfsprogs version number in the form of
# major * 10000 + minor * 100 + release # major * 10000 + minor * 100 + release
-7
View File
@@ -234,13 +234,6 @@ _filter_hole_fiemap()
_coalesce_extents _coalesce_extents
} }
# Prints the md5 checksum of a given file
_md5_checksum()
{
md5sum $1 | cut -d ' ' -f1
}
_filter_bmap() _filter_bmap()
{ {
awk ' awk '
+23
View File
@@ -57,6 +57,13 @@ dd()
fi fi
} }
# Prints the md5 checksum of a given file
_md5_checksum()
{
md5sum $1 | cut -d ' ' -f1
}
# ls -l w/ selinux sometimes puts a dot at the end: # ls -l w/ selinux sometimes puts a dot at the end:
# -rwxrw-r--. id1 id2 file1 # -rwxrw-r--. id1 id2 file1
@@ -1050,6 +1057,22 @@ _require_command()
[ -n "$1" -a -x "$1" ] || _notrun "$_cmd utility required, skipped this test" [ -n "$1" -a -x "$1" ] || _notrun "$_cmd utility required, skipped this test"
} }
# this test requires the device mapper flakey target
#
_require_dm_flakey()
{
_require_command $DMSETUP_PROG
modprobe dm-flakey >/dev/null 2>&1
$DMSETUP_PROG targets | grep flakey >/dev/null 2>&1
if [ $? -eq 0 ]
then
:
else
_notrun "This test requires dm flakey support"
fi
}
# this test requires the projid32bit feature to be available in # this test requires the projid32bit feature to be available in
# mkfs.xfs # mkfs.xfs
# #
+1 -1
View File
@@ -18,7 +18,7 @@ LINUX_TARGETS = xfsctl bstat t_mtab getdevicesize preallo_rw_pattern_reader \
locktest unwritten_mmap bulkstat_unlink_test t_stripealign \ locktest unwritten_mmap bulkstat_unlink_test t_stripealign \
bulkstat_unlink_test_modified t_dir_offset t_futimens t_immutable \ bulkstat_unlink_test_modified t_dir_offset t_futimens t_immutable \
stale_handle pwrite_mmap_blocked t_dir_offset2 seek_sanity_test \ stale_handle pwrite_mmap_blocked t_dir_offset2 seek_sanity_test \
seek_copy_test t_readdir_1 t_readdir_2 seek_copy_test t_readdir_1 t_readdir_2 fsync-tester
SUBDIRS = SUBDIRS =
+537
View File
File diff suppressed because it is too large Load Diff
+161
View File
@@ -0,0 +1,161 @@
#! /bin/bash
# FS QA Test No. 311
#
# Run various fsync tests with dm flakey in freeze() mode and non freeze()
# mode. The idea is that we do random writes and randomly fsync and verify that
# after a fsync() followed by a freeze()+failure or just failure that the file
# is correct. We remount the file system after the failure so that the file
# system can do whatever cleanup it needs to and md5sum the file to make sure
# it matches hat it was before the failure. We also fsck to make sure the file
# system is consistent.
#
# The fsync tester just random writes into prealloc or not, and then fsync()s
# randomly or sync()'s randomly and then fsync()'s before exit. There are a few
# tests that were handcrafted to reproduce bugs in btrfs, so it's also a
# regression test of sorts.
#
#-----------------------------------------------------------------------
# Copyright (c) 2013 Fusion IO. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#-----------------------------------------------------------------------
#
seq=`basename $0`
seqres=$RESULT_DIR/$seq
echo "QA output created by $seq"
here=`pwd`
status=1 # failure is the default!
_cleanup()
{
# If dmsetup load fails then we need to make sure to do resume here
# otherwise the umount will hang
$DMSETUP_PROG resume flakey-test > /dev/null 2>&1
$UMOUNT_PROG $SCRATCH_MNT > /dev/null 2>&1
$DMSETUP_PROG remove flakey-test > /dev/null 2>&1
}
trap "_cleanup; exit \$status" 0 1 2 3 15
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
# real QA test starts here
_supported_fs generic
_supported_os Linux
_need_to_be_root
_require_scratch
_require_dm_flakey
[ -x $here/src/fsync-tester ] || _notrun "fsync-tester not build"
rm -f $seqres.full
BLK_DEV_SIZE=`blockdev --getsz $SCRATCH_DEV`
FLAKEY_DEV=/dev/mapper/flakey-test
SEED=1
testfile=$SCRATCH_MNT/$seq.fsync
FLAKEY_TABLE="0 $BLK_DEV_SIZE flakey $SCRATCH_DEV 0 180 0"
FLAKEY_TABLE_DROP="0 $BLK_DEV_SIZE flakey $SCRATCH_DEV 0 0 180 1 drop_writes"
_TEST_OPTIONS=""
_mount_flakey()
{
mount -t $FSTYP $MOUNT_OPTIONS $FLAKEY_DEV $SCRATCH_MNT
}
_unmount_flakey()
{
$UMOUNT_PROG $SCRATCH_MNT
}
_load_flakey_table()
{
# _load_flakey_table <table>
table="$FLAKEY_TABLE"
[ $1 -eq 1 ] && table="$FLAKEY_TABLE_DROP"
suspend_opt=""
[ $nolockfs -eq 1 ] && suspend_opt="--nolockfs"
$DMSETUP_PROG suspend $suspend_opt flakey-test
[ $? -ne 0 ] && _fatal "failed to suspend flakey-test"
$DMSETUP_PROG load flakey-test --table "$table"
[ $? -ne 0 ] && _fatal "failed to load table into flakey-test"
$DMSETUP_PROG resume flakey-test
[ $? -ne 0 ] && _fatal "failed to resumeflakey-test"
}
_run_test()
{
# _run_test <testnum> <0 - buffered | 1 - O_DIRECT>
allow_writes=0
drop_writes=1
test_num=$1
direct_opt=""
[ $2 -eq 1 ] && direct_opt="-d"
$here/src/fsync-tester -s $SEED -t $test_num $direct_opt $testfile
[ $? -ne 0 ] && _fatal "fsync tester exited abnormally"
_md5_checksum $testfile
_load_flakey_table $drop_writes
_unmount_flakey
#Ok mount so that any recovery that needs to happen is done
_load_flakey_table $allow_writes
_mount_flakey
_md5_checksum $testfile
#Unmount and fsck to make sure we got a valid fs after replay
_unmount_flakey
_check_scratch_fs
[ $? -ne 0 ] && _fatal "fsck failed"
_mount_flakey
}
_scratch_mkfs >> $seqres.full 2>&1
# Create a basic flakey device that will never error out
$DMSETUP_PROG create flakey-test --table "$FLAKEY_TABLE"
[ $? -ne 0 ] && _fatal "failed to create flakey device"
_mount_flakey
buffered=0
direct=1
for i in $(seq 1 20); do
nolockfs=0
SEED=$i
echo "Running test $i buffered, normal suspend"
_run_test $i $buffered
echo "Running test $i direct, normal suspend"
_run_test $i $direct
nolockfs=1
echo "Running test $i buffered, nolockfs"
_run_test $i $buffered
echo "Running test $i direct, nolockfs"
_run_test $i $direct
done
status=0
exit
+321
View File
@@ -0,0 +1,321 @@
QA output created by 311
Running test 1 buffered, normal suspend
Random seed is 1
ee6103415276cde95544b11b2675f132
ee6103415276cde95544b11b2675f132
Running test 1 direct, normal suspend
Random seed is 1
ee6103415276cde95544b11b2675f132
ee6103415276cde95544b11b2675f132
Running test 1 buffered, nolockfs
Random seed is 1
ee6103415276cde95544b11b2675f132
ee6103415276cde95544b11b2675f132
Running test 1 direct, nolockfs
Random seed is 1
ee6103415276cde95544b11b2675f132
ee6103415276cde95544b11b2675f132
Running test 2 buffered, normal suspend
Random seed is 2
42d4a277a0a64deff214f15bb932a6e6
42d4a277a0a64deff214f15bb932a6e6
Running test 2 direct, normal suspend
Random seed is 2
42d4a277a0a64deff214f15bb932a6e6
42d4a277a0a64deff214f15bb932a6e6
Running test 2 buffered, nolockfs
Random seed is 2
42d4a277a0a64deff214f15bb932a6e6
42d4a277a0a64deff214f15bb932a6e6
Running test 2 direct, nolockfs
Random seed is 2
42d4a277a0a64deff214f15bb932a6e6
42d4a277a0a64deff214f15bb932a6e6
Running test 3 buffered, normal suspend
Random seed is 3
076dcf77aa365c8dfe567d973cad207a
076dcf77aa365c8dfe567d973cad207a
Running test 3 direct, normal suspend
Random seed is 3
076dcf77aa365c8dfe567d973cad207a
076dcf77aa365c8dfe567d973cad207a
Running test 3 buffered, nolockfs
Random seed is 3
076dcf77aa365c8dfe567d973cad207a
076dcf77aa365c8dfe567d973cad207a
Running test 3 direct, nolockfs
Random seed is 3
076dcf77aa365c8dfe567d973cad207a
076dcf77aa365c8dfe567d973cad207a
Running test 4 buffered, normal suspend
Random seed is 4
4c76ca100e40574a32f98b520d2e210d
4c76ca100e40574a32f98b520d2e210d
Running test 4 direct, normal suspend
Random seed is 4
4c76ca100e40574a32f98b520d2e210d
4c76ca100e40574a32f98b520d2e210d
Running test 4 buffered, nolockfs
Random seed is 4
4c76ca100e40574a32f98b520d2e210d
4c76ca100e40574a32f98b520d2e210d
Running test 4 direct, nolockfs
Random seed is 4
4c76ca100e40574a32f98b520d2e210d
4c76ca100e40574a32f98b520d2e210d
Running test 5 buffered, normal suspend
Random seed is 5
c79cdc2af7d4a18af401a919f7c21f20
c79cdc2af7d4a18af401a919f7c21f20
Running test 5 direct, normal suspend
Random seed is 5
c79cdc2af7d4a18af401a919f7c21f20
c79cdc2af7d4a18af401a919f7c21f20
Running test 5 buffered, nolockfs
Random seed is 5
c79cdc2af7d4a18af401a919f7c21f20
c79cdc2af7d4a18af401a919f7c21f20
Running test 5 direct, nolockfs
Random seed is 5
c79cdc2af7d4a18af401a919f7c21f20
c79cdc2af7d4a18af401a919f7c21f20
Running test 6 buffered, normal suspend
Random seed is 6
02d28dd2bbd4be579fea4128e7804dda
02d28dd2bbd4be579fea4128e7804dda
Running test 6 direct, normal suspend
Random seed is 6
02d28dd2bbd4be579fea4128e7804dda
02d28dd2bbd4be579fea4128e7804dda
Running test 6 buffered, nolockfs
Random seed is 6
02d28dd2bbd4be579fea4128e7804dda
02d28dd2bbd4be579fea4128e7804dda
Running test 6 direct, nolockfs
Random seed is 6
02d28dd2bbd4be579fea4128e7804dda
02d28dd2bbd4be579fea4128e7804dda
Running test 7 buffered, normal suspend
Random seed is 7
15b0f93f2f12c3feb34024af345adc21
15b0f93f2f12c3feb34024af345adc21
Running test 7 direct, normal suspend
Random seed is 7
15b0f93f2f12c3feb34024af345adc21
15b0f93f2f12c3feb34024af345adc21
Running test 7 buffered, nolockfs
Random seed is 7
15b0f93f2f12c3feb34024af345adc21
15b0f93f2f12c3feb34024af345adc21
Running test 7 direct, nolockfs
Random seed is 7
15b0f93f2f12c3feb34024af345adc21
15b0f93f2f12c3feb34024af345adc21
Running test 8 buffered, normal suspend
Random seed is 8
77bad17366ceaa24f538c915345aeb02
77bad17366ceaa24f538c915345aeb02
Running test 8 direct, normal suspend
Random seed is 8
77bad17366ceaa24f538c915345aeb02
77bad17366ceaa24f538c915345aeb02
Running test 8 buffered, nolockfs
Random seed is 8
77bad17366ceaa24f538c915345aeb02
77bad17366ceaa24f538c915345aeb02
Running test 8 direct, nolockfs
Random seed is 8
77bad17366ceaa24f538c915345aeb02
77bad17366ceaa24f538c915345aeb02
Running test 9 buffered, normal suspend
Random seed is 9
c989c34943ff1b1115d582d8cb7afa0d
c989c34943ff1b1115d582d8cb7afa0d
Running test 9 direct, normal suspend
Random seed is 9
c989c34943ff1b1115d582d8cb7afa0d
c989c34943ff1b1115d582d8cb7afa0d
Running test 9 buffered, nolockfs
Random seed is 9
c989c34943ff1b1115d582d8cb7afa0d
c989c34943ff1b1115d582d8cb7afa0d
Running test 9 direct, nolockfs
Random seed is 9
c989c34943ff1b1115d582d8cb7afa0d
c989c34943ff1b1115d582d8cb7afa0d
Running test 10 buffered, normal suspend
Random seed is 10
d76096280f08ca8907dfd53c102b3987
d76096280f08ca8907dfd53c102b3987
Running test 10 direct, normal suspend
Random seed is 10
d76096280f08ca8907dfd53c102b3987
d76096280f08ca8907dfd53c102b3987
Running test 10 buffered, nolockfs
Random seed is 10
d76096280f08ca8907dfd53c102b3987
d76096280f08ca8907dfd53c102b3987
Running test 10 direct, nolockfs
Random seed is 10
d76096280f08ca8907dfd53c102b3987
d76096280f08ca8907dfd53c102b3987
Running test 11 buffered, normal suspend
Random seed is 11
1144c9b3147873328cf4e81d066cd3da
1144c9b3147873328cf4e81d066cd3da
Running test 11 direct, normal suspend
Random seed is 11
1144c9b3147873328cf4e81d066cd3da
1144c9b3147873328cf4e81d066cd3da
Running test 11 buffered, nolockfs
Random seed is 11
1144c9b3147873328cf4e81d066cd3da
1144c9b3147873328cf4e81d066cd3da
Running test 11 direct, nolockfs
Random seed is 11
1144c9b3147873328cf4e81d066cd3da
1144c9b3147873328cf4e81d066cd3da
Running test 12 buffered, normal suspend
Random seed is 12
ae31d41d825b392bdd6b2453e05ad02e
ae31d41d825b392bdd6b2453e05ad02e
Running test 12 direct, normal suspend
Random seed is 12
ae31d41d825b392bdd6b2453e05ad02e
ae31d41d825b392bdd6b2453e05ad02e
Running test 12 buffered, nolockfs
Random seed is 12
ae31d41d825b392bdd6b2453e05ad02e
ae31d41d825b392bdd6b2453e05ad02e
Running test 12 direct, nolockfs
Random seed is 12
ae31d41d825b392bdd6b2453e05ad02e
ae31d41d825b392bdd6b2453e05ad02e
Running test 13 buffered, normal suspend
Random seed is 13
63f0ccfc767186236f887e5b25466e7d
63f0ccfc767186236f887e5b25466e7d
Running test 13 direct, normal suspend
Random seed is 13
63f0ccfc767186236f887e5b25466e7d
63f0ccfc767186236f887e5b25466e7d
Running test 13 buffered, nolockfs
Random seed is 13
63f0ccfc767186236f887e5b25466e7d
63f0ccfc767186236f887e5b25466e7d
Running test 13 direct, nolockfs
Random seed is 13
63f0ccfc767186236f887e5b25466e7d
63f0ccfc767186236f887e5b25466e7d
Running test 14 buffered, normal suspend
Random seed is 14
9085b05b3af61c8ce63430219d4a72d1
9085b05b3af61c8ce63430219d4a72d1
Running test 14 direct, normal suspend
Random seed is 14
9085b05b3af61c8ce63430219d4a72d1
9085b05b3af61c8ce63430219d4a72d1
Running test 14 buffered, nolockfs
Random seed is 14
9085b05b3af61c8ce63430219d4a72d1
9085b05b3af61c8ce63430219d4a72d1
Running test 14 direct, nolockfs
Random seed is 14
9085b05b3af61c8ce63430219d4a72d1
9085b05b3af61c8ce63430219d4a72d1
Running test 15 buffered, normal suspend
Random seed is 15
bda67622d5430b65c60d3d929949dbd8
bda67622d5430b65c60d3d929949dbd8
Running test 15 direct, normal suspend
Random seed is 15
bda67622d5430b65c60d3d929949dbd8
bda67622d5430b65c60d3d929949dbd8
Running test 15 buffered, nolockfs
Random seed is 15
bda67622d5430b65c60d3d929949dbd8
bda67622d5430b65c60d3d929949dbd8
Running test 15 direct, nolockfs
Random seed is 15
bda67622d5430b65c60d3d929949dbd8
bda67622d5430b65c60d3d929949dbd8
Running test 16 buffered, normal suspend
Random seed is 16
840e068eb58a9b68d31d6f8addc5b5dd
840e068eb58a9b68d31d6f8addc5b5dd
Running test 16 direct, normal suspend
Random seed is 16
840e068eb58a9b68d31d6f8addc5b5dd
840e068eb58a9b68d31d6f8addc5b5dd
Running test 16 buffered, nolockfs
Random seed is 16
840e068eb58a9b68d31d6f8addc5b5dd
840e068eb58a9b68d31d6f8addc5b5dd
Running test 16 direct, nolockfs
Random seed is 16
840e068eb58a9b68d31d6f8addc5b5dd
840e068eb58a9b68d31d6f8addc5b5dd
Running test 17 buffered, normal suspend
Random seed is 17
9d2d33931de2bb1fb07ee67a7daea6e8
9d2d33931de2bb1fb07ee67a7daea6e8
Running test 17 direct, normal suspend
Random seed is 17
9d2d33931de2bb1fb07ee67a7daea6e8
9d2d33931de2bb1fb07ee67a7daea6e8
Running test 17 buffered, nolockfs
Random seed is 17
9d2d33931de2bb1fb07ee67a7daea6e8
9d2d33931de2bb1fb07ee67a7daea6e8
Running test 17 direct, nolockfs
Random seed is 17
9d2d33931de2bb1fb07ee67a7daea6e8
9d2d33931de2bb1fb07ee67a7daea6e8
Running test 18 buffered, normal suspend
Random seed is 18
4bf90f24854b21e314924996bd7ec39e
4bf90f24854b21e314924996bd7ec39e
Running test 18 direct, normal suspend
Random seed is 18
4bf90f24854b21e314924996bd7ec39e
4bf90f24854b21e314924996bd7ec39e
Running test 18 buffered, nolockfs
Random seed is 18
4bf90f24854b21e314924996bd7ec39e
4bf90f24854b21e314924996bd7ec39e
Running test 18 direct, nolockfs
Random seed is 18
4bf90f24854b21e314924996bd7ec39e
4bf90f24854b21e314924996bd7ec39e
Running test 19 buffered, normal suspend
Random seed is 19
26b2ad08ac2589804a15ceb473f0b1ac
26b2ad08ac2589804a15ceb473f0b1ac
Running test 19 direct, normal suspend
Random seed is 19
26b2ad08ac2589804a15ceb473f0b1ac
26b2ad08ac2589804a15ceb473f0b1ac
Running test 19 buffered, nolockfs
Random seed is 19
26b2ad08ac2589804a15ceb473f0b1ac
26b2ad08ac2589804a15ceb473f0b1ac
Running test 19 direct, nolockfs
Random seed is 19
26b2ad08ac2589804a15ceb473f0b1ac
26b2ad08ac2589804a15ceb473f0b1ac
Running test 20 buffered, normal suspend
Random seed is 20
a16ac2b84456d41a15a1a4cc1202179f
a16ac2b84456d41a15a1a4cc1202179f
Running test 20 direct, normal suspend
Random seed is 20
a16ac2b84456d41a15a1a4cc1202179f
a16ac2b84456d41a15a1a4cc1202179f
Running test 20 buffered, nolockfs
Random seed is 20
a16ac2b84456d41a15a1a4cc1202179f
a16ac2b84456d41a15a1a4cc1202179f
Running test 20 direct, nolockfs
Random seed is 20
a16ac2b84456d41a15a1a4cc1202179f
a16ac2b84456d41a15a1a4cc1202179f
+1
View File
@@ -113,3 +113,4 @@
308 auto quick 308 auto quick
309 auto quick 309 auto quick
310 auto 310 auto
311 auto metadata log