common: add helper function _flakey_drop_and_remount
authorFilipe Manana <fdmanana@suse.com>
Mon, 16 Nov 2015 21:41:32 +0000 (08:41 +1100)
committerDave Chinner <david@fromorbit.com>
Mon, 16 Nov 2015 21:41:32 +0000 (08:41 +1100)
To avoid having many tests repeating the following pattern:

        _load_flakey_table $FLAKEY_DROP_WRITES
        _unmount_flakey

        _load_flakey_table $FLAKEY_ALLOW_WRITES
        _mount_flakey

add the helper function _flakey_drop_and_remount to remove
the existing duplicated code and serve as a shortcut.

Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
23 files changed:
common/dmflakey
tests/btrfs/056
tests/btrfs/095
tests/btrfs/098
tests/generic/034
tests/generic/039
tests/generic/040
tests/generic/041
tests/generic/056
tests/generic/057
tests/generic/059
tests/generic/065
tests/generic/066
tests/generic/073
tests/generic/090
tests/generic/101
tests/generic/104
tests/generic/106
tests/generic/107
tests/generic/321
tests/generic/322
tests/generic/325
tests/shared/002

index e55aefdd45a4ff395e65c9d4632b1d97f53d7d1d..dec85c172c28f98e8e8903351c9c808f7754b1b2 100644 (file)
@@ -74,3 +74,18 @@ _load_flakey_table()
        $DMSETUP_PROG resume flakey-test
        [ $? -ne 0 ] && _fatal  "failed to resumeflakey-test"
 }
+
+# Silently drop all writes and unmount/remount to simulate a crash/power
+# failure.
+_flakey_drop_and_remount()
+{
+       _load_flakey_table $FLAKEY_DROP_WRITES
+       _unmount_flakey
+
+       if [ "x$1" = "xyes" ]; then
+               _check_scratch_fs $FLAKEY_DEV
+       fi
+
+       _load_flakey_table $FLAKEY_ALLOW_WRITES
+       _mount_flakey
+}
index add82885894efa0c7a6f20a19b0a3f146570719b..66a59b8b458887316c712ae194779f824af80949 100755 (executable)
@@ -97,14 +97,7 @@ test_btrfs_clone_fsync_log_recover()
        $CLONER_PROG -s 0 -d 0 -l 3500 $SCRATCH_MNT/foo2 $SCRATCH_MNT/bar2
        $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/bar2
 
-       _load_flakey_table $FLAKEY_DROP_WRITES
-       _unmount_flakey
-
-       # Verify that there are no consistency errors.
-       _check_scratch_fs $FLAKEY_DEV
-
-       _load_flakey_table $FLAKEY_ALLOW_WRITES
-       _mount_flakey
+       _flakey_drop_and_remount yes
 
        # Verify the cloned range was persisted by fsync and the log recovery
        # code did its work well.
index 854ba40f8adef075d0554b1b44023652e971ccf1..1b4ba9004083c834767e2909e96dcd78939f7eed 100755 (executable)
@@ -129,11 +129,6 @@ $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/foo
 echo "File digest before power failure:"
 md5sum $SCRATCH_MNT/foo | _filter_scratch
 
-# Silently drop all writes and ummount to simulate a crash/power failure.
-_load_flakey_table $FLAKEY_DROP_WRITES
-_unmount_flakey
-
-# Allow writes again, mount to trigger log replay and validate file contents.
 # During log replay, the btrfs delayed references implementation used to run the
 # deletion of back references before the addition of new back references, which
 # made the addition fail as it didn't find the key in the extent tree that it
@@ -142,8 +137,7 @@ _unmount_flakey
 # log replay - when running the delayed references at transaction commit time,
 # btrfs was applying the deletion before the insertion, resulting in a failure
 # of the insertion that ended up turning the fs into read-only mode.
-_load_flakey_table $FLAKEY_ALLOW_WRITES
-_mount_flakey
+_flakey_drop_and_remount
 
 echo "File digest after log replay:"
 md5sum $SCRATCH_MNT/foo | _filter_scratch
index f12df5f5510cb526e5142223c97453ed4313b2fb..8aef119191367d60735246118f782dc5ae5e1e88 100755 (executable)
@@ -84,11 +84,6 @@ $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/foo
 echo "File digest before power failure:"
 md5sum $SCRATCH_MNT/foo | _filter_scratch
 
-# Silently drop all writes and ummount to simulate a crash/power failure.
-_load_flakey_table $FLAKEY_DROP_WRITES
-_unmount_flakey
-
-# Allow writes again, mount to trigger log replay and validate file contents.
 # The fsync log replay first processes the file extent item corresponding to the
 # file offset 400K (the one which refers to the [20K, 40K[ sub-range of our 100K
 # extent) and then processes the file extent item for file offset 800K. It used
@@ -109,8 +104,7 @@ _unmount_flakey
 #  "BTRFS warning (device dm-0): csum failed ino 257 off 917504 csum 1322675045\
 #    expected csum 0"
 #
-_load_flakey_table $FLAKEY_ALLOW_WRITES
-_mount_flakey
+_flakey_drop_and_remount
 
 echo "File digest after log replay:"
 # Must match the same digest he had after cloning the extent and before the
index ee889c227778394c9be620b87b4a50452dacbf54..1065c702a28ac78d1ec9b5b6b846cca339f37287 100755 (executable)
@@ -75,15 +75,11 @@ touch $SCRATCH_MNT/test_dir/bar
 $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/test_dir
 $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/test_dir/bar
 
-_load_flakey_table $FLAKEY_DROP_WRITES
-_unmount_flakey
-
-_load_flakey_table $FLAKEY_ALLOW_WRITES
 # In the original btrfs bug, log replay would update the directory's inode
 # i_size incorrectly - it would sum again the size of dentry 'foo' (3) to
 # the inode's i_size, which is incorrect because the dentry was already
 # persisted before (in the fs/subvol tree).
-_mount_flakey
+_flakey_drop_and_remount
 
 [ -f $SCRATCH_MNT/test_dir/foo ] || echo "file foo is missing"
 [ -f $SCRATCH_MNT/test_dir/bar ] || echo "file bar is missing"
index 35cb7a443c51bf2606ae4177dd18b52ceced4ac2..21c04d25fdbe895a69675ef6b6733761fdb6efd4 100755 (executable)
@@ -78,14 +78,7 @@ sync
 rm -f $SCRATCH_MNT/a/b/bar
 $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/a/b/foo
 
-# Simulate a crash/power loss. This makes sure the next mount
-# will see an fsync log and will replay that log.
-
-_load_flakey_table $FLAKEY_DROP_WRITES
-_unmount_flakey
-
-_load_flakey_table $FLAKEY_ALLOW_WRITES
-_mount_flakey
+_flakey_drop_and_remount
 
 # Remove the last hard link of the file and attempt to remove its parent
 # directory - this failed in btrfs because the fsync log and replay code
index 3142bbb35b29bc638bc1d7cecf59b20ac216cd29..7e90e00412777d7d8ff616322966d7b1728fa7c6 100755 (executable)
@@ -94,14 +94,7 @@ sync
 ln $SCRATCH_MNT/foo $SCRATCH_MNT/foo_link_3001
 $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/foo
 
-# Simulate a crash/power loss. This makes sure the next mount
-# will see an fsync log and will replay that log.
-
-_load_flakey_table $FLAKEY_DROP_WRITES
-_unmount_flakey
-
-_load_flakey_table $FLAKEY_ALLOW_WRITES
-_mount_flakey
+_flakey_drop_and_remount
 
 # Now after the fsync log replay btrfs left our inode with a wrong link count N,
 # which was smaller than the correct link count M (N < M).
index 506d8a9168b93cc0415ac798ed4715081012523e..7816389109a8f62c3d40e558a327f483bbeb3d63 100755 (executable)
@@ -103,14 +103,7 @@ ln $SCRATCH_MNT/foo $SCRATCH_MNT/foo_link_3002
 ln $SCRATCH_MNT/foo $SCRATCH_MNT/foo_link_3003
 $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/foo
 
-# Simulate a crash/power loss. This makes sure the next mount
-# will see an fsync log and will replay that log.
-
-_load_flakey_table $FLAKEY_DROP_WRITES
-_unmount_flakey
-
-_load_flakey_table $FLAKEY_ALLOW_WRITES
-_mount_flakey
+_flakey_drop_and_remount
 
 # Check that the number of hard links is correct, we are able to remove all
 # the hard links and read the file's data. This is just to verify we don't
index 2ec155f517911d35eb21e8c99825a616243348ca..b72069099eda4714790b415b4132b735f885b639 100755 (executable)
@@ -83,12 +83,7 @@ $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/bar
 echo "File content before:"
 od -t x1 $SCRATCH_MNT/foo
 
-# Simulate a crash/power loss.
-_load_flakey_table $FLAKEY_DROP_WRITES
-_unmount_flakey
-
-_load_flakey_table $FLAKEY_ALLOW_WRITES
-_mount_flakey
+_flakey_drop_and_remount
 
 # After the fsync log replay, because the fsync log had a value of 0 for our
 # inode's i_size, we couldn't read anymore the 4Kb of data that we previously
index c11c329f1a3836bae52d1ac1e981dcb683f23405..fa4d17a6b329df8ff6f4ccb2a1c680def3d5b375 100755 (executable)
@@ -93,12 +93,7 @@ $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/bar
 echo "File content before:"
 od -t x1 $SCRATCH_MNT/foo
 
-# Simulate a crash/power loss.
-_load_flakey_table $FLAKEY_DROP_WRITES
-_unmount_flakey
-
-_load_flakey_table $FLAKEY_ALLOW_WRITES
-_mount_flakey
+_flakey_drop_and_remount
 
 # After mounting the fs again, the fsync log was replayed.
 # The btrfs fsync log replay code didn't update the i_size of the persisted
index 4b9184a2a3eeef45140343ec845f68f2c2bc4087..de4e7ce079a744d8c69670aa3ae85c9601383ad4 100755 (executable)
@@ -103,13 +103,7 @@ $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/foo
 echo "File content before:"
 od -t x1 $SCRATCH_MNT/foo
 
-# Simulate a crash/power loss.
-_load_flakey_table $FLAKEY_DROP_WRITES
-_unmount_flakey
-
-# Enable writes and mount the fs. This makes the fsync log replay code run.
-_load_flakey_table $FLAKEY_ALLOW_WRITES
-_mount_flakey
+_flakey_drop_and_remount
 
 # Because the last fsync didn't do anything, here the file content matched what
 # it was after the first fsync, before the holes were punched, and not what it
index ddab6870717518a54b4961b322cb94c92a7260b8..37077d53875d0105f06c0321e173848432b31b3b 100755 (executable)
@@ -101,12 +101,7 @@ $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/mydir
 # no bad influence on this fsync.
 $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/hello
 
-# Simulate a crash/power loss.
-_load_flakey_table $FLAKEY_DROP_WRITES
-_unmount_flakey
-
-_load_flakey_table $FLAKEY_ALLOW_WRITES
-_mount_flakey
+_flakey_drop_and_remount
 
 # Verify the content of our file 'foo' remains the same as before, 8192 bytes,
 # all with the value 0xaa.
index 211152d043451af12785c6dc8ac67870f6697298..3c215bd8666117179b7c0a0aaa851cee85d77b50 100755 (executable)
@@ -63,15 +63,6 @@ _require_dm_target flakey
 _require_attrs
 _require_metadata_journaling $SCRATCH_DEV
 
-_crash_and_mount()
-{
-       # Simulate a crash/power loss.
-       _load_flakey_table $FLAKEY_DROP_WRITES
-       _unmount_flakey
-       _load_flakey_table $FLAKEY_ALLOW_WRITES
-       _mount_flakey
-}
-
 rm -f $seqres.full
 
 _scratch_mkfs >> $seqres.full 2>&1
@@ -91,7 +82,7 @@ sync
 $SETFATTR_PROG -x user.attr2 $SCRATCH_MNT/foobar
 $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/foobar
 
-_crash_and_mount
+_flakey_drop_and_remount
 
 # After the fsync log is replayed, the file should have only 2 xattrs, the ones
 # named user.attr1 and user.attr3. The btrfs fsync log replay bug left the file
@@ -111,7 +102,7 @@ ln $SCRATCH_MNT/foobar $SCRATCH_MNT/foobar_link
 touch $SCRATCH_MNT/qwerty
 $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/qwerty
 
-_crash_and_mount
+_flakey_drop_and_remount
 
 # Now only the xattr with name user.attr3 should be set in our file.
 echo "xattr names and values after second fsync log replay:"
index 759098d63d85cb70c3cbffa92caf720a19487aaa..1c92c66fc78d368cf2a0a5ee3813106589461c8a 100755 (executable)
@@ -98,12 +98,7 @@ $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/testdir_1
 # happened when we fsynced the parent directory.
 $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/foo
 
-# Simulate a crash/power loss.
-_load_flakey_table $FLAKEY_DROP_WRITES
-_unmount_flakey
-
-_load_flakey_table $FLAKEY_ALLOW_WRITES
-_mount_flakey
+_flakey_drop_and_remount
 
 # Now check that all data we wrote before are available.
 echo "File content after log replay:"
index 3890fc1a61ac612a61bbcb8c63d4d5db5bd50a0c..1bc9b16142c827b6f04b94692bba0372bd355a31 100755 (executable)
@@ -93,13 +93,7 @@ $XFS_IO_PROG -c "pwrite -S 0xbb 32K 32K" \
 echo "File content after fsync and before crash:"
 od -t x1 $SCRATCH_MNT/foo
 
-# Simulate a crash/power loss.
-_load_flakey_table $FLAKEY_DROP_WRITES
-_unmount_flakey
-
-# Allow writes again and mount. This makes the fs replay its fsync log.
-_load_flakey_table $FLAKEY_ALLOW_WRITES
-_mount_flakey
+_flakey_drop_and_remount
 
 echo "File content after crash and log replay:"
 od -t x1 $SCRATCH_MNT/foo
index ea98a893931336a42d2af6b787f6d76182e77a5c..8771a173721ea0d6940d7e5e8f0c84fb0463f846 100755 (executable)
@@ -96,12 +96,7 @@ $XFS_IO_PROG -c "truncate 0" \
                -c "fsync" \
                $SCRATCH_MNT/bar
 
-_load_flakey_table $FLAKEY_DROP_WRITES
-_unmount_flakey
-
-# Allow writes again, mount to trigger log replay and validate file contents.
-_load_flakey_table $FLAKEY_ALLOW_WRITES
-_mount_flakey
+_flakey_drop_and_remount
 
 # We expect foo to have a size of 125Kb, the first 64Kb of data all having the
 # value 0xaa and the remaining 61Kb to be a hole (all bytes with value 0x00).
index 2eee63853901bd624974b836eb5671ccd759f6a1..ceab94b35a6ee59543869391c618a78e9c5f8d93 100755 (executable)
@@ -72,13 +72,7 @@ ln $SCRATCH_MNT/testdir/bar $SCRATCH_MNT/testdir/bar_link
 ln $SCRATCH_MNT/testdir/foo $SCRATCH_MNT/testdir/foo_link
 $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/testdir/bar
 
-# Silently drop all writes on our scratch device to simulate a power failure.
-_load_flakey_table $FLAKEY_DROP_WRITES
-_unmount_flakey
-
-# Allow writes again and mount the fs to trigger log/journal replay.
-_load_flakey_table $FLAKEY_ALLOW_WRITES
-_mount_flakey
+_flakey_drop_and_remount
 
 # Now verify both our files have a link count of 2.
 echo "Link count for file foo: $(stat -c %h $SCRATCH_MNT/testdir/foo)"
index e4f9cae9117fbc9a168a7ba95f3cd34d1d6ea742..9dd2e6b27e3e35705a59439525b19b60831f9704 100755 (executable)
@@ -71,13 +71,7 @@ unlink $SCRATCH_MNT/testdir/bar
 echo 2 > /proc/sys/vm/drop_caches
 $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/testdir/foo
 
-# Silently drop all writes on our scratch device to simulate a power failure.
-_load_flakey_table $FLAKEY_DROP_WRITES
-_unmount_flakey
-
-# Allow writes again and mount the fs to trigger log/journal replay.
-_load_flakey_table $FLAKEY_ALLOW_WRITES
-_mount_flakey
+_flakey_drop_and_remount
 
 # Now verify our directory entries.
 echo "Entries in testdir:"
index 7503e40e3b0a08e134e9156bd24fb3b63e161ba5..6b5f2bbe50c3519c10b80381a759fcee48d09fbe 100755 (executable)
@@ -76,13 +76,7 @@ unlink $SCRATCH_MNT/testdir/foo3
 # is not the directory "testdir".
 $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/foo
 
-# Silently drop all writes and unmount to simulate a crash/power failure.
-_load_flakey_table $FLAKEY_DROP_WRITES
-_unmount_flakey
-
-# Allow writes again and mount the fs to trigger log/journal replay.
-_load_flakey_table $FLAKEY_ALLOW_WRITES
-_mount_flakey
+_flakey_drop_and_remount
 
 # After the journal/log is replayed we expect to not see the "foo3" link anymore
 # and we should be able to remove all names in the directory "testdir" and then
index 1a89880469554abcb4be01fbe0dd0a60f9b04dbb..7c6c8234b02f1888299f040a564343b01346bfd7 100755 (executable)
@@ -63,11 +63,9 @@ _directory_test()
        _mount_flakey
        mkdir $SCRATCH_MNT/bar
        $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/bar
-       _load_flakey_table $FLAKEY_DROP_WRITES
-       _unmount_flakey
 
-       _load_flakey_table $FLAKEY_ALLOW_WRITES
-       _mount_flakey
+       _flakey_drop_and_remount
+
        _ls_l $SCRATCH_MNT | tail -n +2 | awk '{ print $1, $9 }'
        _unmount_flakey
        _check_scratch_fs $FLAKEY_DEV
@@ -85,11 +83,9 @@ _rename_test()
        mv $SCRATCH_MNT/foo $SCRATCH_MNT/bar/foo
        $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/bar
        $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/bar/foo
-       _load_flakey_table $FLAKEY_DROP_WRITES
-       _unmount_flakey
 
-       _load_flakey_table $FLAKEY_ALLOW_WRITES
-       _mount_flakey
+       _flakey_drop_and_remount\
+
        _ls_l $SCRATCH_MNT | tail -n +2 | awk '{ print $1, $9 }'
        _ls_l $SCRATCH_MNT/bar | tail -n +2 | awk '{ print $1, $9 }'
        _unmount_flakey
@@ -114,11 +110,9 @@ _replay_rename_test()
        setfattr -n user.foo -v blah $SCRATCH_MNT/bar/foo >> $seqres.full 2>&1
 
        $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/bar/foo
-       _load_flakey_table $FLAKEY_DROP_WRITES
-       _unmount_flakey
 
-       _load_flakey_table $FLAKEY_ALLOW_WRITES
-       _mount_flakey
+       _flakey_drop_and_remount
+
        _ls_l $SCRATCH_MNT | tail -n +2 | awk '{ print $1, $9 }'
        _ls_l $SCRATCH_MNT/bar | tail -n +2 | awk '{ print $1, $9 }'
        _unmount_flakey
index 324022b3df958dbf325fb9ba382b9cc63ef2f623..9c925a44a2d3208f0f9d51e5fca05220512f0615 100755 (executable)
@@ -65,12 +65,10 @@ _rename_test()
                > $seqres.full 2>&1 || _fail "xfs_io failed"
        mv $SCRATCH_MNT/foo $SCRATCH_MNT/bar
        $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/bar
-       _load_flakey_table $FLAKEY_DROP_WRITES
        md5sum $SCRATCH_MNT/bar | _filter_scratch
-       _unmount_flakey
 
-       _load_flakey_table $FLAKEY_ALLOW_WRITES
-       _mount_flakey
+       _flakey_drop_and_remount
+
        md5sum $SCRATCH_MNT/bar | _filter_scratch
        _unmount_flakey
        _check_scratch_fs $FLAKEY_DEV
@@ -87,12 +85,10 @@ _write_after_fsync_rename_test()
                -c "sync_range -b" $SCRATCH_MNT/foo > $seqres.full 2>&1 || _fail "xfs_io failed"
        mv $SCRATCH_MNT/foo $SCRATCH_MNT/bar
        $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/bar
-       _load_flakey_table $FLAKEY_DROP_WRITES
        md5sum $SCRATCH_MNT/bar | _filter_scratch
-       _unmount_flakey
 
-       _load_flakey_table $FLAKEY_ALLOW_WRITES
-       _mount_flakey
+       _flakey_drop_and_remount
+
        md5sum $SCRATCH_MNT/bar | _filter_scratch
        _unmount_flakey
 }
index 94d30be51a51204c44c549d9295ffef72de21e14..0994ff6523f794fa12886a3715522c9a50d8da57 100755 (executable)
@@ -92,11 +92,7 @@ $XFS_IO_PROG \
 echo "File content before crash/reboot:"
 od -t x1 $SCRATCH_MNT/foo
 
-_load_flakey_table $FLAKEY_DROP_WRITES
-_unmount_flakey
-
-_load_flakey_table $FLAKEY_ALLOW_WRITES
-_mount_flakey
+_flakey_drop_and_remount
 
 echo "File content after crash/reboot and fs mount:"
 od -t x1 $SCRATCH_MNT/foo
index cf02fcfeeeefbae16adb340257eff59fa45f4942..eb8713bfc9d9c3735f8d9a477d0d732967f02161 100755 (executable)
@@ -98,13 +98,7 @@ $XFS_IO_PROG -c "pwrite -S 0xbb 8K 16K" \
                -c "fsync" \
                $SCRATCH_MNT/foo | _filter_xfs_io
 
-# Simulate a crash/power loss.
-_load_flakey_table $FLAKEY_DROP_WRITES
-_unmount_flakey
-
-# Allow writes again and mount. This makes the fs replay its fsync log.
-_load_flakey_table $FLAKEY_ALLOW_WRITES
-_mount_flakey
+_flakey_drop_and_remount
 
 echo "File content after crash and log replay:"
 od -t x1 $SCRATCH_MNT/foo