Files
apfstests/tests/xfs/318
T
Darrick J. Wong 9f07f7a016 xfs: force unlink metadata updates to disk
In xfs/318 and xfs/325 we inject errors on extent freeing then delete
some files to see if we can make the filesystem go offline.  However,
with the advent of deferred inode inactivation, sync won't guarantee
that unlinked inodes removal is actually pushed to disk since the "inode
needs to be deallocated" state is persisted to disk.  Freeze achieves
this, however, so inject a freeze/thaw cycle to make sure we hit the
injected error.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Eryu Guan <guaneryu@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
2018-11-04 23:23:58 +08:00

81 lines
1.6 KiB
Bash
Executable File

#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2016, Oracle and/or its affiliates. All Rights Reserved.
#
# FS QA Test No. 318
#
# Simulate free extent errors with a file write and a file remove.
#
seq=`basename $0`
seqres=$RESULT_DIR/$seq
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()
{
cd /
_scratch_unmount > /dev/null 2>&1
rm -rf $tmp.*
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/inject
# real QA test starts here
_supported_os Linux
_supported_fs xfs
_require_scratch
_require_error_injection
_require_xfs_io_error_injection "rmap_finish_one"
rm -f $seqres.full
blksz=65536
blks=64
sz=$((blksz * blks))
echo "Format filesystem"
_scratch_mkfs >/dev/null 2>&1
_scratch_mount >> $seqres.full
echo "Create files"
touch $SCRATCH_MNT/file1
echo "Write files"
$XFS_IO_PROG -c "pwrite -S 0x67 0 $sz" $SCRATCH_MNT/file1 >> $seqres.full
sync
echo "Check files"
md5sum $SCRATCH_MNT/file1 2>&1 | _filter_scratch
echo "Inject error"
_scratch_inject_error "free_extent"
echo "Remove files"
rm -rf $SCRATCH_MNT/file1
sync
$XFS_IO_PROG -x -c 'freeze' -c 'thaw' $SCRATCH_MNT >> $seqres.full 2>&1
echo "FS should be shut down, touch will fail"
touch $SCRATCH_MNT/badfs 2>&1 | _filter_scratch
echo "Remount to replay log"
_scratch_inject_logprint >> $seqres.full
echo "Check files"
md5sum $SCRATCH_MNT/file1 2>&1 | _filter_scratch
echo "FS should be online, touch should succeed"
touch $SCRATCH_MNT/goodfs
echo "Done"
# success, all done
status=0
exit