All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4] btrfs: Test proper interaction between skip_balance and paused balance
@ 2021-11-25  9:48 Nikolay Borisov
  0 siblings, 0 replies; only message in thread
From: Nikolay Borisov @ 2021-11-25  9:48 UTC (permalink / raw)
  To: linux-btrfs; +Cc: fstests, Nikolay Borisov

Ensure a device can be added to a filesystem that has a paused balance
operation and has been mounted with the 'skip_balance' mount option

Signed-off-by: Nikolay Borisov <nborisov@suse.com>
---

V4:
 * No longer use mount uuid
 * Some typos fixes

 tests/btrfs/049     | 90 +++++++++++++++++++++++++++++++++++++++++++++
 tests/btrfs/049.out |  1 +
 2 files changed, 91 insertions(+)
 create mode 100755 tests/btrfs/049

diff --git a/tests/btrfs/049 b/tests/btrfs/049
new file mode 100755
index 000000000000..765b1de36699
--- /dev/null
+++ b/tests/btrfs/049
@@ -0,0 +1,90 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2021 SUSE Linux Products GmbH.  All Rights Reserved.
+#
+# FS QA Test 049
+#
+# Ensure that it's possible to add a device when we have a paused balance
+# and the filesystem is mounted with skip_balance. The issue is fixed by a patch
+# titled "btrfs: allow device add if balance is paused"
+#
+. ./common/preamble
+_begin_fstest quick balance auto
+
+# real QA test starts here
+
+_supported_fs btrfs
+_require_scratch_swapfile
+_require_scratch_dev_pool 3
+
+_scratch_dev_pool_get 2
+_spare_dev_get
+
+swapfile="$SCRATCH_MNT/swap"
+_scratch_pool_mkfs >/dev/null
+_scratch_mount
+_format_swapfile "$swapfile" $(($(get_page_size) * 10))
+
+check_exclusive_ops()
+{
+	$BTRFS_UTIL_PROG device remove 2 $SCRATCH_MNT &>/dev/null
+	[ $? -ne 0 ] || _fail "Successfully removed device"
+	$BTRFS_UTIL_PROG filesystem resize -5m $SCRATCH_MNT &> /dev/null
+	[ $? -ne 0 ] || _fail "Successfully resized filesystem"
+	$BTRFS_UTIL_PROG replace start -B 2 $SPARE_DEV $SCRATCH_MNT &> /dev/null
+	[ $? -ne 0 ] || _fail "Successfully replaced device"
+	swapon "$swapfile" &> /dev/null
+	[ $? -ne 0 ] || _fail "Successfully enabled a swap file"
+}
+
+# Create some files on the so that balance doesn't complete instantly
+args=`_scale_fsstress_args -z \
+	-f write=10 -f creat=10 \
+	-n 1000 -p 2 -d $SCRATCH_MNT/stress_dir`
+echo "Run fsstress $args" >>$seqres.full
+$FSSTRESS_PROG $args >/dev/null 2>&1
+
+# Start and pause balance to ensure it will be restored on remount
+echo "Start balance" >>$seqres.full
+_run_btrfs_balance_start --bg "$SCRATCH_MNT"
+$BTRFS_UTIL_PROG balance pause "$SCRATCH_MNT"
+$BTRFS_UTIL_PROG balance status "$SCRATCH_MNT" | grep -q paused
+[ $? -eq 0 ] || _fail "Balance not paused"
+
+# Exclusive ops should be blocked on manual pause of balance
+check_exclusive_ops
+
+# Balance is now placed in paused state during mount
+_scratch_cycle_mount "skip_balance"
+
+# Exclusive ops should be blocked on balance pause due to 'skip_balance'
+check_exclusive_ops
+
+# Device add is the only allowed operation
+$BTRFS_UTIL_PROG device add -K -f $SPARE_DEV "$SCRATCH_MNT"
+
+# Exclusive ops should still be blocked on account that balance is still paused
+check_exclusive_ops
+
+# Should be possible to resume balance after device add
+$BTRFS_UTIL_PROG balance resume "$SCRATCH_MNT" &>/dev/null
+[ $? -eq 0 ] || _fail "Couldn't resume balance after device add"
+
+# Add more files so that new balance won't fish immediately
+$FSSTRESS_PROG $args >/dev/null 2>&1
+
+# Now pause->resume balance. This ensures balance paused is properly set in
+# the kernel and won't trigger an assertion failure.
+echo "Start balance" >>$seqres.full
+_run_btrfs_balance_start --bg "$SCRATCH_MNT"
+$BTRFS_UTIL_PROG balance pause "$SCRATCH_MNT"
+$BTRFS_UTIL_PROG balance status "$SCRATCH_MNT" | grep -q paused
+[ $? -eq 0 ] || _fail "Balance not paused"
+$BTRFS_UTIL_PROG balance resume "$SCRATCH_MNT" &>/dev/null
+[ $? -eq 0 ] || _fail "Balance can't be resumed via IOCTL"
+
+_spare_dev_put
+_scratch_dev_pool_put
+echo "Silence is golden"
+status=0
+exit
diff --git a/tests/btrfs/049.out b/tests/btrfs/049.out
index cb0061b33ff0..c69568ad9323 100644
--- a/tests/btrfs/049.out
+++ b/tests/btrfs/049.out
@@ -1 +1,2 @@
 QA output created by 049
+Silence is golden
--
2.17.1


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2021-11-25  9:50 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-25  9:48 [PATCH v4] btrfs: Test proper interaction between skip_balance and paused balance Nikolay Borisov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.