mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
68d3b93bf6
Many tests use dm_flakey to trigger log replay, but for filesystems that don't support metadata journaling, this causes failures when it shouldn't. (i.e. we can hardly test log replay if there is no log, and the subsequent filesystem check will turn up errors). For some tests they actually sync everything we care about, and find inconsistencies elsewhere, but I erred on the side of simply not running the test in most cases. Tested-by: Filipe Manana <fdmanana@suse.com> Signed-off-by: Eric Sandeen <sandeen@redhat.com> Reviewed-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: Lukas Czerner <lczerner@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
111 lines
2.9 KiB
Bash
Executable File
111 lines
2.9 KiB
Bash
Executable File
#! /bin/bash
|
|
# FS QA Test No. 322
|
|
#
|
|
# Runs various rename fsync tests to cover some rename fsync corner cases.
|
|
#
|
|
#-----------------------------------------------------------------------
|
|
# 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()
|
|
{
|
|
_cleanup_flakey
|
|
}
|
|
trap "_cleanup; exit \$status" 0 1 2 3 15
|
|
|
|
# get standard environment, filters and checks
|
|
. ./common/rc
|
|
. ./common/filter
|
|
. ./common/dmflakey
|
|
|
|
# real QA test starts here
|
|
_supported_fs generic
|
|
_supported_os Linux
|
|
_need_to_be_root
|
|
_require_scratch_nocheck
|
|
_require_dm_flakey
|
|
_require_metadata_journaling $SCRATCH_DEV
|
|
|
|
rm -f $seqres.full
|
|
|
|
_clean_working_dir()
|
|
{
|
|
_mount_flakey
|
|
rm -rf $SCRATCH_MNT/foo $SCRATCH_MNT/bar
|
|
_unmount_flakey
|
|
}
|
|
|
|
# Btrfs wasn't making sure the new file after rename survived the fsync
|
|
_rename_test()
|
|
{
|
|
echo "fsync rename test"
|
|
_mount_flakey
|
|
$XFS_IO_PROG -f -c "pwrite 0 1M" -c "fsync" $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
|
|
md5sum $SCRATCH_MNT/bar | _filter_scratch
|
|
_unmount_flakey
|
|
_check_scratch_fs $FLAKEY_DEV
|
|
[ $? -ne 0 ] && _fatal "fsck failed"
|
|
}
|
|
|
|
# Btrfs was dropping some of the modified extents in between fsyncs if we
|
|
# renamed.
|
|
_write_after_fsync_rename_test()
|
|
{
|
|
echo "fsync rename test"
|
|
_mount_flakey
|
|
$XFS_IO_PROG -f -c "pwrite 0 1M" -c "fsync" -c "pwrite 2M 1M" \
|
|
-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
|
|
md5sum $SCRATCH_MNT/bar | _filter_scratch
|
|
_unmount_flakey
|
|
}
|
|
|
|
_scratch_mkfs >> $seqres.full 2>&1
|
|
|
|
# Create a basic flakey device that will never error out
|
|
_init_flakey
|
|
|
|
_rename_test
|
|
_clean_working_dir
|
|
_write_after_fsync_rename_test
|
|
|
|
status=0
|
|
exit
|