Linux XFS filesystem development
 help / color / mirror / Atom feed
* [PATCH] generic: add a test that stresses metadata eviction
@ 2026-05-18  6:24 Christoph Hellwig
  2026-05-18 12:27 ` Carlos Maiolino
  0 siblings, 1 reply; 8+ messages in thread
From: Christoph Hellwig @ 2026-05-18  6:24 UTC (permalink / raw)
  To: zlang; +Cc: cmaiolino, fstests, linux-xfs

The fsverity test generic/759 could be used to reproduce a regression in
the xfs buffer hashing.  Carlos Maiolino figured out that even removing
the fsverity-specific bits would reproduce the issue.  This test is
thus a copy of generic/759 with the fsverity bits striped out, and
run 5 times as that seems to be the threshold at which the issue
reproduces reliably.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---

Not sure how to best credit Eric for the original patch and Carlos
for the extraction, any ideas?

 tests/generic/4201     | 108 +++++++++++++++++++++++++++++++++++++++++
 tests/generic/4201.out |   2 +
 2 files changed, 110 insertions(+)
 create mode 100755 tests/generic/4201
 create mode 100644 tests/generic/4201.out

diff --git a/tests/generic/4201 b/tests/generic/4201
new file mode 100755
index 000000000000..fc367beeadaf
--- /dev/null
+++ b/tests/generic/4201
@@ -0,0 +1,108 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright 2019 Google LLC
+#
+# FS QA Test generic/4201
+#
+# Race dropping file systems caches vs fsstress an repeated reading of files.
+# Based on generic/579 with the fsverity bits stripped out, and an increased
+# number of runs.
+#
+. ./common/preamble
+_begin_fstest auto stress
+
+stop_run()
+{
+	# Stop all subprocesses.
+	_kill_fsstress
+	touch $tmp.done
+	wait
+}
+
+_cleanup()
+{
+	stop_run
+	rm -f $tmp.*
+}
+
+. ./common/filter
+
+fsv_file_size=10000000
+nproc_enabler=$((4 * LOAD_FACTOR))
+nproc_reader=$((6 * LOAD_FACTOR))
+nproc_stress=$((3 * LOAD_FACTOR))
+runtime=$((20 * TIME_FACTOR))
+
+run_test()
+{
+	rm -rf $tmp.done
+
+	# Create the test files and start the fs-verity enabler processes.
+	for ((proc = 0; proc < nproc_enabler; proc++)); do
+		orig_file=$SCRATCH_MNT/orig$proc
+		fsv_file=$SCRATCH_MNT/fsv$proc
+		head -c $fsv_file_size /dev/urandom > $orig_file
+		(
+			while [ ! -e $tmp.done ]; do
+				rm -f $fsv_file
+				cp $orig_file $fsv_file
+				# Give the readers some time to read from the file.
+				sleep 0.$((RANDOM % 100))
+			done
+		) &
+	done
+
+	# Start the reader processes.
+	for ((proc = 0; proc < nproc_reader; proc++)); do
+		(
+			while [ ! -e $tmp.done ]; do
+				# Choose a random file for each iteration, so that
+				# sometimes multiple processes read from the same file.
+				i=$((RANDOM % nproc_enabler))
+				orig_file=$SCRATCH_MNT/orig$i
+				fsv_file=$SCRATCH_MNT/fsv$i
+
+				# After the copy from $orig_file to $fsv_file has
+				# completed, the contents of these two files should
+				# match, regardless of whether verity has been enabled
+				# or not yet (or is currently being enabled).
+				cmp $orig_file $fsv_file |& _filter_scratch | \
+					sed -e "s/'//g" | \
+					grep -v "SCRATCH_MNT/fsv$i: No such file or directory" | \
+					grep -v "EOF on SCRATCH_MNT/fsv$i"
+				done
+		) &
+	done
+
+	# Start a process that occasionally runs 'sync && drop_caches'.  This makes more
+	# reads go through fs-verity for real, rather than just returning pagecache.
+	(
+		while [ ! -e $tmp.done ]; do
+			sleep 2.$((RANDOM % 100))
+			_scratch_sync && echo 3 > /proc/sys/vm/drop_caches
+		done
+	) &
+
+	# Start the fsstress processes.
+	_run_fsstress_bg -p $nproc_stress -l 0 -d $SCRATCH_MNT/stressdir
+
+	# Run for a while.
+	sleep $runtime
+
+	stop_run
+}
+
+for i in $(seq 1 5); do
+	echo "Starting run $i" >> $seqres.full
+
+	_scratch_mkfs &>> $seqres.full
+	_scratch_mount
+	run_test
+	_scratch_unmount
+done
+
+echo "Silence is golden"
+
+# success, all done
+status=0
+exit
diff --git a/tests/generic/4201.out b/tests/generic/4201.out
new file mode 100644
index 000000000000..2c3f3d42ff3f
--- /dev/null
+++ b/tests/generic/4201.out
@@ -0,0 +1,2 @@
+QA output created by 4201
+Silence is golden
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2026-05-19 20:47 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-18  6:24 [PATCH] generic: add a test that stresses metadata eviction Christoph Hellwig
2026-05-18 12:27 ` Carlos Maiolino
2026-05-18 19:03   ` Zorro Lang
2026-05-19  8:37     ` Christoph Hellwig
2026-05-19 17:58       ` Eric Biggers
2026-05-19 20:47       ` Zorro Lang
2026-05-19 12:57     ` Theodore Tso
2026-05-19 20:39       ` Zorro Lang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox