mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
3c7fd09bc7
This test examines the behavior of xfs when the underlying filesystem is a sparse image on the scratch filesystem when the scratch fs is about to run out of space. Unfortunately, the test assumes that the scratch fs will ENOSPC on the large data write. It's possible that metadata writeback will hit ENOSPC instead, and if we do, the test will hang forever while xfs retries the write. Make sure we're set up to fail fast so that we don't hang the test appliance. 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>
71 lines
1.6 KiB
Bash
Executable File
71 lines
1.6 KiB
Bash
Executable File
#! /bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
# Copyright (c) 2016 Red Hat Inc. All Rights Reserved.
|
|
#
|
|
# FS QA Test 361
|
|
#
|
|
# Test remount on I/O errors.
|
|
#
|
|
# XFS had a bug to hang on remount in this case, this kernel commit fix
|
|
# the issue.
|
|
# 5cb13dc cancel the setfilesize transation when io error happen
|
|
#
|
|
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()
|
|
{
|
|
$UMOUNT_PROG $fs_mnt
|
|
_destroy_loop_device $loop_dev
|
|
cd /
|
|
rm -f $tmp.*
|
|
}
|
|
|
|
# get standard environment, filters and checks
|
|
. ./common/rc
|
|
. ./common/filter
|
|
|
|
rm -f $seqres.full
|
|
|
|
# real QA test starts here
|
|
_supported_fs generic
|
|
_supported_os Linux
|
|
_require_scratch
|
|
_require_block_device $SCRATCH_DEV
|
|
_require_loop
|
|
|
|
# create a small filesystem to hold another filesystem image
|
|
_scratch_mkfs_sized $((512 * 1024 * 1024)) >>$seqres.full 2>&1
|
|
_scratch_mount
|
|
|
|
# create the sparse fs image and mount point
|
|
fs_img=$SCRATCH_MNT/fs.img
|
|
fs_mnt=$SCRATCH_MNT/mnt
|
|
$XFS_IO_PROG -fc "truncate 1g" $fs_img >>$seqres.full 2>&1
|
|
mkdir -p $fs_mnt
|
|
|
|
# mount loop device and create a larger file to hit I/O errors on loop device
|
|
loop_dev=$(_create_loop_device $fs_img)
|
|
_mkfs_dev $loop_dev
|
|
_mount $loop_dev $fs_mnt
|
|
if [ "$FSTYP" = "xfs" ]; then
|
|
# Turn off all XFS metadata IO error retries
|
|
dname=$(_short_dev $loop_dev)
|
|
echo 0 | tee /sys/fs/xfs/$dname/error/*/*/* > /dev/null
|
|
fi
|
|
$XFS_IO_PROG -fc "pwrite 0 520m" $fs_mnt/testfile >>$seqres.full 2>&1
|
|
|
|
# remount should not hang
|
|
$MOUNT_PROG -o remount,ro $fs_mnt >>$seqres.full 2>&1
|
|
|
|
# success, all done
|
|
echo "Silence is golden"
|
|
status=0
|
|
exit
|