[PATCH 02/11] xfs/{030,033,178}: forcibly disable metadata directory trees

Darrick J. Wong
2025-01-16T23:32:28Z

The golden output for thests tests encode the xfs_repair output when we
fuzz various parts of the filesystem. With metadata directory trees
enabled, however, the golden output changes dramatically to reflect
reconstruction of the metadata directory tree.

To avoid regressions, add a helper to force metadata directories off via
MKFS_OPTIONS.

Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
---
common/xfs | 25 +++++++++++++++++++++++++
tests/xfs/030 | 1 +
tests/xfs/033 | 1 +
tests/xfs/178 | 1 +
4 files changed, 28 insertions(+)

diff --git a/common/xfs b/common/xfs
index 092b3dc6f3bdc5..ee7fe7b92a4950 100644
--- a/common/xfs
+++ b/common/xfs
@@ -1908,3 +1908,28 @@ _scratch_xfs_find_metafile()
echo "inode $sb_field"
return 0
}
+
+# Force metadata directories off.
+_scratch_xfs_force_no_metadir()
+{
+ # Remove any mkfs-time quota options because those are only supported
+ # with metadir=1
+ for opt in uquota gquota pquota; do
+ echo "$MKFS_OPTIONS" | grep -q -w "$opt" || continue
+
+ MKFS_OPTIONS="$(echo "$MKFS_OPTIONS" | sed -e "s/,$opt//g" -e "s/ $opt/ /g")"
+ MOUNT_OPTIONS="$MOUNT_OPTIONS -o $opt"
+ done
+
+ # Replace any explicit metadir option with metadir=0
+ if echo "$MKFS_OPTIONS" | grep -q 'metadir='; then
+ MKFS_OPTIONS="$(echo "$MKFS_OPTIONS" | sed -e 's/metadir=[0-9]*/metadir=0/g' -e 's/metadir\([, ]\)/metadir=0\1/g')"
+ return
+ fi
+
+ # Inject metadir=0 if there isn't one in MKFS_OPTIONS and mkfs supports
+ # that option.
+ if grep -q 'metadir=' $MKFS_XFS_PROG; then
+ MKFS_OPTIONS="-m metadir=0 $MKFS_OPTIONS"
+ fi
+}
diff --git a/tests/xfs/030 b/tests/xfs/030
index 7ce5ffce38693c..22fbdb2fdbc999 100755
--- a/tests/xfs/030
+++ b/tests/xfs/030
@@ -48,6 +48,7 @@ _check_ag()

_require_scratch
_require_no_large_scratch_dev
+_scratch_xfs_force_no_metadir

DSIZE="-dsize=100m,agcount=6"

diff --git a/tests/xfs/033 b/tests/xfs/033
index d7b02a9c51b3f0..e0b0dd58212d61 100755
--- a/tests/xfs/033
+++ b/tests/xfs/033
@@ -51,6 +51,7 @@ _filter_bad_ids()

_require_scratch
_require_no_large_scratch_dev
+_scratch_xfs_force_no_metadir

# devzero blows away 512byte blocks, so make 512byte inodes (at least)
_scratch_mkfs_xfs | _filter_mkfs 2>$tmp.mkfs >/dev/null
diff --git a/tests/xfs/178 b/tests/xfs/178
index a22e626706ec49..0cc0e3f5bb88b4 100755
--- a/tests/xfs/178
+++ b/tests/xfs/178
@@ -50,6 +50,7 @@ _dd_repair_check()
# fix filesystem, new mkfs.xfs will be fine.

_require_scratch
+_scratch_xfs_force_no_metadir
_scratch_mkfs_xfs | _filter_mkfs 2>$tmp.mkfs

# By executing the followint tmp file, will get on the mkfs options stored in