The exclusive ops will not start if there's one already running. The enqueue parameter allows operations to be queued.
Signed-off-by: An Long <l...@suse.com> --- .../misc-tests/048-enqueue-parameter/test.sh | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100755 tests/misc-tests/048-enqueue-parameter/test.sh diff --git a/tests/misc-tests/048-enqueue-parameter/test.sh b/tests/misc-tests/048-enqueue-parameter/test.sh new file mode 100755 index 00000000..4be7d466 --- /dev/null +++ b/tests/misc-tests/048-enqueue-parameter/test.sh @@ -0,0 +1,52 @@ +#!/bin/bash +# Check if --enqueue can enqueueing of the operations correctly + +source "$TEST_TOP/common" + +check_prereq mkfs.btrfs +check_prereq btrfs +check_global_prereq fallocate + +setup_loopdevs 3 +prepare_loopdevs +dev1=${loopdevs[1]} +dev2=${loopdevs[2]} +dev3=${loopdevs[3]} +run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f "$dev1" +run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f "$dev2" +run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f "$dev3" +run_check $SUDO_HELPER mount "$dev1" "$TEST_MNT" +run_check $SUDO_HELPER "$TOP/btrfs" device add -f "$dev2" "$TEST_MNT" + +test_run_commands() { + run_check $SUDO_HELPER "$TOP/btrfs" balance start --enqueue --full-balance "$TEST_MNT" & + run_check $SUDO_HELPER "$TOP/btrfs" filesystem resize --enqueue -100M "$TEST_MNT" & + run_check $SUDO_HELPER "$TOP/btrfs" device add --enqueue -f "$dev3" "$TEST_MNT" & + run_check $SUDO_HELPER "$TOP/btrfs" device delete --enqueue "$dev2" "$TEST_MNT" & +} + +get_fs_uuid() { + run_check_stdout "$TOP/btrfs" inspect-internal dump-super "$1" | \ + grep '^fsid' | awk '{print $2}' +} + +fsid=$(get_fs_uuid "$dev1") +if ! [ -f "/sys/fs/btrfs/$fsid/exclusive_operation" ]; then + run_check_umount_test_dev "$TEST_MNT" + cleanup_loopdevs + _not_run "kernel does not support exclusive_operation" + exit +fi + +# Generate 1G data, for enough balance time for exclusive_operation +for i in $(seq 1 5); do + run_check $SUDO_HELPER fallocate -l 200M "$TEST_MNT/file$i" +done + +# Do btrfs balance in background, then try commands with enqueue parameter +run_check $SUDO_HELPER "$TOP/btrfs" balance start --full-balance "$TEST_MNT" & +test_run_commands +wait + +run_check_umount_test_dev "$TEST_MNT" +cleanup_loopdevs -- 2.26.2