[PATCH v2] fstests: btrfs: new test case for leaking BTRFS_FS_STATE_REMOUNTING flag

Qu Wenruo <[email protected]>
Newsgroups org.kernel.vger.linux-btrfs,org.kernel.vger.fstests
Message-ID <[email protected]>
This is a regression test for the patch "btrfs: fix leaking
BTRFS_FS_STATE_REMOUNTING flag", where conflicting mount options can
cause btrfs leave BTRFS_FS_STATE_REMOUNTING set.

Such set BTRFS_FS_STATE_REMOUNTING will interrupt several features, and
the test case will use "btrfs qgroup rescan" to catch the
BTRFS_FS_STATE_REMOUNTING flag.

Signed-off-by: Qu Wenruo <[email protected]>
---
Changelog:
v2:
- Use _require_btrfs_fs_feature to replace open-coded check
  Although the file content check still requires a open-coded check.
  I do not think there will be another user to check supported rescue
  options any time soon.
---
 tests/btrfs/352     | 50 +++++++++++++++++++++++++++++++++++++++++++++
 tests/btrfs/352.out |  2 ++
 2 files changed, 52 insertions(+)
 create mode 100755 tests/btrfs/352
 create mode 100644 tests/btrfs/352.out

diff --git a/tests/btrfs/352 b/tests/btrfs/352
new file mode 100755
index 00000000..1d40c09c
--- /dev/null
+++ b/tests/btrfs/352
@@ -0,0 +1,50 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2026 SUSE S.A.  All Rights Reserved.
+#
+# FS QA Test 352
+#
+# A regression test to make sure failed remount won't leave
+# BTRFS_FS_STATE_REMOUNTING flag set, which can interrupt several features,
+# one of them is btrfs qgroup rescan.
+#
+. ./common/preamble
+_begin_fstest auto quick remount
+
+_fixed_by_kernel_commit XXXXXXXXXXXX \
+	"btrfs: fix leaking BTRFS_FS_STATE_REMOUNTING flag"
+
+_require_btrfs_fs_feature supported_rescue_options
+
+if ! grep -q "ignorebadroots" "/sys/fs/btrfs/features/supported_rescue_options"; then
+	_notrun "\"rescue=ignorebadroots\" mount option not supported"
+fi
+
+_require_btrfs_command quota rescan -w
+_require_scratch
+_scratch_mkfs >> $seqres.full
+_scratch_mount
+
+# Enable regular quota mode, and do a rescan.
+# Although the regression is affecting multiple features, qgroup rescan is the
+# easiest to verify.
+_btrfs quota enable $SCRATCH_MNT
+_btrfs quota rescan -w $SCRATCH_MNT
+
+# The following mount must fail, as the following rescue mount option requires
+# a full RO mount, thus it can not be set for the existing RW mount.
+_scratch_remount "rescue=ignorebadroots" >> $seqres.full 2>&1
+if [ $? -eq 0 ]; then
+	_fail "\"rescue=ignorebadroots\" is applied to RW mount unexpectedly"
+fi
+
+# For unpatched kernel, qgroup rescan will be interrupted immediately.
+_btrfs quota rescan -w $SCRATCH_MNT
+
+# We want capture the stderr output, so use $BTRFS_UTIL_PROG instead of _btrfs
+$BTRFS_UTIL_PROG qgroup show $SCRATCH_MNT >> $seqres.full
+
+echo "Silence is golden"
+
+# success, all done
+_exit 0
diff --git a/tests/btrfs/352.out b/tests/btrfs/352.out
new file mode 100644
index 00000000..11826ba5
--- /dev/null
+++ b/tests/btrfs/352.out
@@ -0,0 +1,2 @@
+QA output created by 352
+Silence is golden
-- 
2.51.2
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.