diff --git a/common/rc b/common/rc index c5db0ddf..ca8da7f3 100644 --- a/common/rc +++ b/common/rc @@ -1305,26 +1305,38 @@ _require_block_device() fi } +# brd based ram disks erase the device when they receive a flush command when no +# active references are present. This causes problems for DM devices sitting on +# top of brd devices as DM doesn't hold active references to the brd device. +_require_sane_bdev_flush() +{ + echo $1 | grep -q "^/dev/ram[0-9]\+$" + if [ $? -eq 0 ]; then + _notrun "This test requires a sane block device flush" + fi +} + # this test requires the device mapper flakey target # _require_dm_flakey() { - # require SCRATCH_DEV to be a valid block device - _require_block_device $SCRATCH_DEV - _require_command "$DMSETUP_PROG" dmsetup + # require SCRATCH_DEV to be a valid block device with sane BLKFLSBUF + # behaviour + _require_block_device $SCRATCH_DEV + _require_sane_bdev_flush $SCRATCH_DEV + _require_command "$DMSETUP_PROG" dmsetup - modprobe dm-flakey >/dev/null 2>&1 - $DMSETUP_PROG targets | grep flakey >/dev/null 2>&1 - if [ $? -eq 0 ] - then - : - else - _notrun "This test requires dm flakey support" - fi + modprobe dm-flakey >/dev/null 2>&1 + $DMSETUP_PROG targets | grep flakey >/dev/null 2>&1 + if [ $? -ne 0 ]; then + _notrun "This test requires dm flakey support" + fi } _require_dm_snapshot() { + _require_block_device $SCRATCH_DEV + _require_sane_bdev_flush $SCRATCH_DEV _require_command "$DMSETUP_PROG" dmsetup modprobe dm-snapshot >/dev/null 2>&1 $DMSETUP_PROG targets | grep -q snapshot diff --git a/tests/generic/081 b/tests/generic/081 index e242c4ca..5d38c11a 100755 --- a/tests/generic/081 +++ b/tests/generic/081 @@ -50,7 +50,6 @@ _supported_os Linux _require_test _require_scratch_nocheck _require_dm_snapshot -_require_block_device $SCRATCH_DEV _require_command $LVM_PROG lvm echo "Silence is golden"