#! /bin/bash # SPDX-License-Identifier: GPL-2.0 # Copyright (c) 2015 Red Hat Inc. All Rights Reserved. # Copyright (c) 2023 Christoph Hellwig # # Test proper file system shut down when the block device is removed underneath # and it has no dirty data. # # . ./common/preamble _begin_fstest auto quick _cleanup() { cd / $UMOUNT_PROG $SCSI_DEBUG_MNT >>$seqres.full 2>&1 _put_scsi_debug_dev rm -f $tmp.* } . ./common/filter . ./common/scsi_debug # We don't actually use the test device, but we need a block based fs _require_test _require_block_device $TEST_DEV _supported_fs generic _require_scsi_debug size=$(_small_fs_size_mb 256) SCSI_DEBUG_DEV=`_get_scsi_debug_dev 512 512 0 $size` test -b "$SCSI_DEBUG_DEV" || _notrun "Failed to initialize scsi debug device" echo "SCSI debug device $SCSI_DEBUG_DEV" >>$seqres.full run_check _mkfs_dev $SCSI_DEBUG_DEV SCSI_DEBUG_MNT="$TEST_DIR/scsi_debug_$seq" rm -rf $SCSI_DEBUG_MNT mkdir $SCSI_DEBUG_MNT run_check _mount $SCSI_DEBUG_DEV $SCSI_DEBUG_MNT # create a test file $XFS_IO_PROG -f -c "pwrite 0 1M" -c "fsync" $SCSI_DEBUG_MNT/testfile >>$seqres.full # open a file descriptor for reading the file exec 3< $SCSI_DEBUG_MNT/testfile # drop all caches and delete the scsi debug device echo 3 > /proc/sys/vm/drop_caches echo 1 > /sys/block/`_short_dev $SCSI_DEBUG_DEV`/device/delete # try to read from the file, which should give us -EIO cat <&3 > /dev/null # close the file descriptor to not block unmount exec 3<&- status=0 exit