mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
9f07f7a016
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>
81 lines
1.6 KiB
Bash
Executable File
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
|