From: Nikolay Borisov <nborisov@suse.com>
To: linux-btrfs@vger.kernel.org
Cc: fstests@vger.kernel.org, Nikolay Borisov <nborisov@suse.com>
Subject: [PATCH v2] btrfs: Test proper interaction between skip_balance and paused balance
Date: Mon, 1 Nov 2021 13:54:04 +0200 [thread overview]
Message-ID: <20211101115404.374180-1-nborisov@suse.com> (raw)
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>
---
Changes since v1:
* Removed dependence on exclusive_operation sysfs
* Extended the test to ensure all exclusive ops are forbidden apart from device
add.
* Also ensures exclusive ops are still forbidden following device add
tests/btrfs/049 | 72 +++++++++++++++++++++++++++++++++++++++++++++
tests/btrfs/049.out | 1 +
2 files changed, 73 insertions(+)
create mode 100755 tests/btrfs/049
diff --git a/tests/btrfs/049 b/tests/btrfs/049
new file mode 100755
index 000000000000..dc3c75646d63
--- /dev/null
+++ b/tests/btrfs/049
@@ -0,0 +1,72 @@
+#! /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_dev_pool 3
+
+external_device=$(echo $SCRATCH_DEV_POOL | $AWK_PROG '{print $3}')
+
+_scratch_dev_pool_get 2
+
+_scratch_pool_mkfs >/dev/null
+_scratch_mount
+
+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 $external_device $SCRATCH_MNT &> /dev/null
+ [ $? -ne 0 ] || _fail "Successfully replaced device"
+}
+
+uuid=$(findmnt -n -o UUID $SCRATCH_MNT)
+
+# 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"
+
+# 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 $external_device "$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"
+
+_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
next reply other threads:[~2021-11-01 11:54 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-01 11:54 Nikolay Borisov [this message]
2021-11-02 3:49 ` [PATCH v2] btrfs: Test proper interaction between skip_balance and paused balance Anand Jain
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20211101115404.374180-1-nborisov@suse.com \
--to=nborisov@suse.com \
--cc=fstests@vger.kernel.org \
--cc=linux-btrfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.