mirror of
https://github.com/kdave/btrfs-progs
synced 2025-01-27 16:02:56 +00:00
005d2cc047
[BUG] During my test runs of mkfs-tests, 005-long-device-name-for-ssd failed with the following error messages: ====== RUN CHECK dmsetup remove btrfs-test-with-very-long-name-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQPGc device-mapper: remove ioctl on btrfs-test-with-very-long-name-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQPGc failed: Device or resource busy Command failed. failed: dmsetup remove btrfs-test-with-very-long-name-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQPGc test failed for case 005-long-device-name-for-ssd [CAUSE] There seems to be a race between "btrfs inspect dump-super" and the dmsetup removal. [FIX] Add a "udevadm settle" before removing the dm devices. Also since we're here, use the same "udevadm settle" instead of the manual sleep to wait for the new dm device to show up. Reviewed-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: Qu Wenruo <wqu@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
54 lines
1.5 KiB
Bash
Executable File
54 lines
1.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# a long device name must pass the SSD test
|
|
|
|
source "$TEST_TOP/common" || exit
|
|
|
|
check_prereq mkfs.btrfs
|
|
check_global_prereq udevadm
|
|
check_dm_target_support linear
|
|
|
|
setup_root_helper
|
|
prepare_test_dev
|
|
|
|
# Randomize last 4 characters to prevent clashes of device name on the same system
|
|
chars=( {0..9} {a..z} {A..Z} )
|
|
rand=${chars[$RANDOM % 62]}${chars[$RANDOM % 62]}${chars[$RANDOM % 62]}${chars[$RANDOM % 62]}
|
|
|
|
# prep device
|
|
dmname=\
|
|
btrfs-test-with-very-long-name-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA$rand
|
|
dmdev="/dev/mapper/$dmname"
|
|
|
|
_mktemp_local img 2g
|
|
|
|
loopdev=`run_check_stdout $SUDO_HELPER losetup --find --show img`
|
|
run_check $SUDO_HELPER dmsetup create "$dmname" --table "0 1048576 linear $loopdev 0"
|
|
|
|
# Setting up the device may need some time to appear
|
|
run_check $SUDO_HELPER udevadm settle
|
|
if ! [ -b "$dmdev" ]; then
|
|
_not_run "dm device created but not visible in /dev/mapper"
|
|
fi
|
|
|
|
dmbase=`readlink -f "$dmdev"`
|
|
base=`basename "$dmbase"`
|
|
rot="/sys/class/block/$base/queue/rotational"
|
|
|
|
# switch rotational
|
|
run_check cat $rot
|
|
echo 0 | run_check $SUDO_HELPER tee "$rot"
|
|
run_check cat "$rot"
|
|
|
|
# test
|
|
run_check_stdout $SUDO_HELPER "$TOP/mkfs.btrfs" -f "$@" "$dmdev" |
|
|
grep -q 'SSD detected:.*yes' || _fail 'SSD not detected'
|
|
run_check $SUDO_HELPER "$TOP/btrfs" inspect-internal dump-super "$dmdev"
|
|
|
|
run_check $SUDO_HELPER udevadm settle
|
|
|
|
# cleanup
|
|
run_check $SUDO_HELPER dmsetup remove "$dmname"
|
|
run_mayfail $SUDO_HELPER losetup -d "$loopdev"
|
|
run_check truncate -s0 img
|
|
rm img
|