#! /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. # . ./common/preamble _begin_fstest auto quick rw freeze # Override the default cleanup function. _cleanup() { # Make sure $SCRATCH_MNT is unfreezed xfs_freeze -u $SCRATCH_MNT 2>/dev/null cd / rm -rf $tmp.* } # Import common functions. . ./common/filter . ./common/inject # real QA test starts here _supported_fs xfs _require_scratch _require_error_injection _require_xfs_io_error_injection "rmap_finish_one" _require_freeze blksz=65536 blks=64 sz=$((blksz * blks)) echo "Format filesystem" _scratch_mkfs >/dev/null 2>&1 _scratch_mount >> $seqres.full # This test depends on specific behaviors of the data device, so create all # files on it. _xfs_force_bdev data $SCRATCH_MNT 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_remount_dump_log >> $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