* [PATCH 1/3] fuzzy: mask off a few more inode fields from the fuzz tests
2024-06-03 20:12 [PATCHSET v30.5 2/3] fstests: fuzz non-root dquots on xfs Darrick J. Wong
@ 2024-06-03 20:12 ` Darrick J. Wong
2024-06-04 5:06 ` Christoph Hellwig
2024-06-03 20:12 ` [PATCH 2/3] fuzzy: allow FUZZ_REWRITE_DURATION to control fsstress runtime when fuzzing Darrick J. Wong
2024-06-03 20:12 ` [PATCH 3/3] fuzzy: test other dquot ids Darrick J. Wong
2 siblings, 1 reply; 8+ messages in thread
From: Darrick J. Wong @ 2024-06-03 20:12 UTC (permalink / raw)
To: djwong, zlang; +Cc: fstests, linux-xfs, guan
From: Darrick J. Wong <djwong@kernel.org>
XFS doesn't do any validation for filestreams, so don't waste time
fuzzing that. Exclude the bigtime flag, since we already have inode
timestamps on the no-fuzz list. Exclude the warning counters, since
they're defunct now.
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
common/fuzzy | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/common/fuzzy b/common/fuzzy
index 218fe16543..c07f461b61 100644
--- a/common/fuzzy
+++ b/common/fuzzy
@@ -122,7 +122,11 @@ __filter_unvalidated_xfs_db_fields() {
-e '/^entries.*secure/d' \
-e '/^a.sfattr.list.*value/d' \
-e '/^a.sfattr.list.*root/d' \
- -e '/^a.sfattr.list.*secure/d'
+ -e '/^a.sfattr.list.*secure/d' \
+ -e '/^core.filestream/d' \
+ -e '/^v3.bigtime/d' \
+ -e '/\.rtbwarns/d' \
+ -e '/\.[ib]warns/d'
}
# Filter the xfs_db print command's field debug information
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH 2/3] fuzzy: allow FUZZ_REWRITE_DURATION to control fsstress runtime when fuzzing
2024-06-03 20:12 [PATCHSET v30.5 2/3] fstests: fuzz non-root dquots on xfs Darrick J. Wong
2024-06-03 20:12 ` [PATCH 1/3] fuzzy: mask off a few more inode fields from the fuzz tests Darrick J. Wong
@ 2024-06-03 20:12 ` Darrick J. Wong
2024-06-04 5:06 ` Christoph Hellwig
2024-06-03 20:12 ` [PATCH 3/3] fuzzy: test other dquot ids Darrick J. Wong
2 siblings, 1 reply; 8+ messages in thread
From: Darrick J. Wong @ 2024-06-03 20:12 UTC (permalink / raw)
To: djwong, zlang; +Cc: fstests, linux-xfs, guan
From: Darrick J. Wong <djwong@kernel.org>
For each iteration of the fuzz test loop, we try to correct the problem,
and then we run fsstress on the (allegedly corrected) filesystem to
check that subsequent use of the filesystem won't crash the kernel or
panic.
Now that fsstress has a --duration switch, let's add a new config
variable that people can set to constrain the amount of time that a fuzz
test run takes.
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
check | 12 ++++++++++++
common/fuzzy | 7 +++++--
2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/check b/check
index 723a52e30d..9222cd7e4f 100755
--- a/check
+++ b/check
@@ -376,6 +376,18 @@ if [ -n "$SOAK_DURATION" ]; then
fi
fi
+# If the test config specified a fuzz rewrite test duration, see if there are
+# any unit suffixes that need converting to an integer seconds count.
+if [ -n "$FUZZ_REWRITE_DURATION" ]; then
+ FUZZ_REWRITE_DURATION="$(echo "$FUZZ_REWRITE_DURATION" | \
+ sed -e 's/^\([.0-9]*\)\([a-z]\)*/\1 \2/g' | \
+ $AWK_PROG -f $here/src/soak_duration.awk)"
+ if [ $? -ne 0 ]; then
+ status=1
+ exit 1
+ fi
+fi
+
if [ -n "$subdir_xfile" ]; then
for d in $SRC_GROUPS $FSTYP; do
[ -f $SRC_DIR/$d/$subdir_xfile ] || continue
diff --git a/common/fuzzy b/common/fuzzy
index c07f461b61..ed79dbc7e5 100644
--- a/common/fuzzy
+++ b/common/fuzzy
@@ -6,16 +6,19 @@
# Modify various files after a fuzzing operation
_scratch_fuzz_modify() {
+ local fsstress_args=(-n $((TIME_FACTOR * 10000)) -p $((LOAD_FACTOR * 4)) )
+ test -n "${FUZZ_REWRITE_DURATION}" && fsstress_args+=("--duration=${FUZZ_REWRITE_DURATION}")
+
echo "+++ stressing filesystem"
mkdir -p $SCRATCH_MNT/data
[ "$FSTYP" == "xfs" ] && _xfs_force_bdev data $SCRATCH_MNT/data
- $FSSTRESS_PROG -n $((TIME_FACTOR * 10000)) -p $((LOAD_FACTOR * 4)) -d $SCRATCH_MNT/data
+ $FSSTRESS_PROG "${fsstress_args[@]}" -d $SCRATCH_MNT/data
if [ "$FSTYP" = "xfs" ]; then
if _xfs_has_feature "$SCRATCH_MNT" realtime; then
mkdir -p $SCRATCH_MNT/rt
_xfs_force_bdev realtime $SCRATCH_MNT/rt
- $FSSTRESS_PROG -n $((TIME_FACTOR * 10000)) -p $((LOAD_FACTOR * 4)) -d $SCRATCH_MNT/rt
+ $FSSTRESS_PROG "${fsstress_args[@]}" -d $SCRATCH_MNT/rt
else
echo "+++ xfs realtime not configured"
fi
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH 3/3] fuzzy: test other dquot ids
2024-06-03 20:12 [PATCHSET v30.5 2/3] fstests: fuzz non-root dquots on xfs Darrick J. Wong
2024-06-03 20:12 ` [PATCH 1/3] fuzzy: mask off a few more inode fields from the fuzz tests Darrick J. Wong
2024-06-03 20:12 ` [PATCH 2/3] fuzzy: allow FUZZ_REWRITE_DURATION to control fsstress runtime when fuzzing Darrick J. Wong
@ 2024-06-03 20:12 ` Darrick J. Wong
2024-06-04 5:06 ` Christoph Hellwig
2 siblings, 1 reply; 8+ messages in thread
From: Darrick J. Wong @ 2024-06-03 20:12 UTC (permalink / raw)
To: djwong, zlang; +Cc: fstests, linux-xfs, guan
From: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
common/fuzzy | 14 ++++++++++++++
common/populate | 14 ++++++++++++++
tests/xfs/425 | 10 +++++++---
tests/xfs/426 | 10 +++++++---
tests/xfs/427 | 10 +++++++---
tests/xfs/428 | 10 +++++++---
tests/xfs/429 | 10 +++++++---
tests/xfs/430 | 10 +++++++---
tests/xfs/487 | 10 +++++++---
tests/xfs/488 | 10 +++++++---
tests/xfs/489 | 10 +++++++---
tests/xfs/779 | 10 +++++++---
tests/xfs/780 | 10 +++++++---
tests/xfs/781 | 10 +++++++---
14 files changed, 112 insertions(+), 36 deletions(-)
diff --git a/common/fuzzy b/common/fuzzy
index ed79dbc7e5..5621b98b7f 100644
--- a/common/fuzzy
+++ b/common/fuzzy
@@ -680,6 +680,20 @@ _scratch_xfs_set_xattr_fuzz_types() {
SCRATCH_XFS_XATTR_FUZZ_TYPES=(EXTENTS_REMOTE3K EXTENTS_REMOTE4K LEAF NODE)
}
+# Sets the array SCRATCH_XFS_QUOTA_FUZZ_IDS to the list of dquot ids available
+# for fuzzing. By default, this list contains 0 (root), 4242 (non-root), and
+# 8484 (zero counts). Users can override this by setting
+# SCRATCH_XFS_LIST_FUZZ_QUOTAIDS in the environment.
+_scratch_xfs_set_quota_fuzz_ids() {
+ if [ -n "${SCRATCH_XFS_LIST_FUZZ_QUOTAIDS}" ]; then
+ mapfile -t SCRATCH_XFS_QUOTA_FUZZ_IDS < \
+ <(echo "${SCRATCH_XFS_LIST_FUZZ_QUOTAIDS}" | tr '[ ,]' '[\n\n]')
+ return
+ fi
+
+ SCRATCH_XFS_QUOTA_FUZZ_IDS=(0 4242 8484)
+}
+
# Grab the list of available fuzzing verbs
_scratch_xfs_list_fuzz_verbs() {
if [ -n "${SCRATCH_XFS_LIST_FUZZ_VERBS}" ]; then
diff --git a/common/populate b/common/populate
index 33f2db8d4a..15f8055c2c 100644
--- a/common/populate
+++ b/common/populate
@@ -360,6 +360,20 @@ _scratch_xfs_populate() {
mknod "${SCRATCH_MNT}/S_IFBLK" b 1 1
mknod "${SCRATCH_MNT}/S_IFIFO" p
+ # non-root dquot
+ local nonroot_id=4242
+ echo "${nonroot_id}" > "${SCRATCH_MNT}/non_root_dquot"
+ chown "${nonroot_id}:${nonroot_id}" "${SCRATCH_MNT}/non_root_dquot"
+ $XFS_IO_PROG -c "chproj ${nonroot_id}" "${SCRATCH_MNT}/non_root_dquot"
+
+ # empty dquot
+ local empty_id=8484
+ echo "${empty_id}" > "${SCRATCH_MNT}/empty_dquot"
+ chown "${empty_id}:${empty_id}" "${SCRATCH_MNT}/empty_dquot"
+ $XFS_IO_PROG -c "chproj ${empty_id}" "${SCRATCH_MNT}/empty_dquot"
+ chown "0:0" "${SCRATCH_MNT}/empty_dquot"
+ $XFS_IO_PROG -c "chproj 0" "${SCRATCH_MNT}/empty_dquot"
+
# special file with an xattr
setfacl -P -m u:nobody:r ${SCRATCH_MNT}/S_IFCHR
diff --git a/tests/xfs/425 b/tests/xfs/425
index c2e16ee87e..5275e594b2 100755
--- a/tests/xfs/425
+++ b/tests/xfs/425
@@ -27,9 +27,13 @@ echo "Format and populate"
_scratch_populate_cached nofill > $seqres.full 2>&1
echo "${MOUNT_OPTIONS}" | grep -q 'usrquota' || _notrun "user quota disabled"
-echo "Fuzz user 0 dquot"
-_scratch_xfs_fuzz_metadata '' 'offline' "dquot -u 0" >> $seqres.full
-echo "Done fuzzing dquot"
+_scratch_xfs_set_quota_fuzz_ids
+
+for id in "${SCRATCH_XFS_QUOTA_FUZZ_IDS[@]}"; do
+ echo "Fuzz user $id dquot"
+ _scratch_xfs_fuzz_metadata '' 'offline' "dquot -u $id" >> $seqres.full
+ echo "Done fuzzing dquot"
+done
# success, all done
status=0
diff --git a/tests/xfs/426 b/tests/xfs/426
index e52b15f28d..06f0f44b62 100755
--- a/tests/xfs/426
+++ b/tests/xfs/426
@@ -27,9 +27,13 @@ echo "Format and populate"
_scratch_populate_cached nofill > $seqres.full 2>&1
echo "${MOUNT_OPTIONS}" | grep -q 'usrquota' || _notrun "user quota disabled"
-echo "Fuzz user 0 dquot"
-_scratch_xfs_fuzz_metadata '' 'online' "dquot -u 0" >> $seqres.full
-echo "Done fuzzing dquot"
+_scratch_xfs_set_quota_fuzz_ids
+
+for id in "${SCRATCH_XFS_QUOTA_FUZZ_IDS[@]}"; do
+ echo "Fuzz user $id dquot"
+ _scratch_xfs_fuzz_metadata '' 'online' "dquot -u $id" >> $seqres.full
+ echo "Done fuzzing dquot"
+done
# success, all done
status=0
diff --git a/tests/xfs/427 b/tests/xfs/427
index 19f45fbd81..327cddd879 100755
--- a/tests/xfs/427
+++ b/tests/xfs/427
@@ -27,9 +27,13 @@ echo "Format and populate"
_scratch_populate_cached nofill > $seqres.full 2>&1
echo "${MOUNT_OPTIONS}" | grep -q 'grpquota' || _notrun "group quota disabled"
-echo "Fuzz group 0 dquot"
-_scratch_xfs_fuzz_metadata '' 'offline' "dquot -g 0" >> $seqres.full
-echo "Done fuzzing dquot"
+_scratch_xfs_set_quota_fuzz_ids
+
+for id in "${SCRATCH_XFS_QUOTA_FUZZ_IDS[@]}"; do
+ echo "Fuzz group $id dquot"
+ _scratch_xfs_fuzz_metadata '' 'offline' "dquot -g $id" >> $seqres.full
+ echo "Done fuzzing dquot"
+done
# success, all done
status=0
diff --git a/tests/xfs/428 b/tests/xfs/428
index 338e659df2..80b05b8450 100755
--- a/tests/xfs/428
+++ b/tests/xfs/428
@@ -27,9 +27,13 @@ echo "Format and populate"
_scratch_populate_cached nofill > $seqres.full 2>&1
echo "${MOUNT_OPTIONS}" | grep -q 'grpquota' || _notrun "group quota disabled"
-echo "Fuzz group 0 dquot"
-_scratch_xfs_fuzz_metadata '' 'online' "dquot -g 0" >> $seqres.full
-echo "Done fuzzing dquot"
+_scratch_xfs_set_quota_fuzz_ids
+
+for id in "${SCRATCH_XFS_QUOTA_FUZZ_IDS[@]}"; do
+ echo "Fuzz group $id dquot"
+ _scratch_xfs_fuzz_metadata '' 'online' "dquot -g $id" >> $seqres.full
+ echo "Done fuzzing dquot"
+done
# success, all done
status=0
diff --git a/tests/xfs/429 b/tests/xfs/429
index a4aeb6e440..5fa3b2ce29 100755
--- a/tests/xfs/429
+++ b/tests/xfs/429
@@ -27,9 +27,13 @@ echo "Format and populate"
_scratch_populate_cached nofill > $seqres.full 2>&1
echo "${MOUNT_OPTIONS}" | grep -q 'prjquota' || _notrun "project quota disabled"
-echo "Fuzz project 0 dquot"
-_scratch_xfs_fuzz_metadata '' 'offline' "dquot -p 0" >> $seqres.full
-echo "Done fuzzing dquot"
+_scratch_xfs_set_quota_fuzz_ids
+
+for id in "${SCRATCH_XFS_QUOTA_FUZZ_IDS[@]}"; do
+ echo "Fuzz project $id dquot"
+ _scratch_xfs_fuzz_metadata '' 'offline' "dquot -p $id" >> $seqres.full
+ echo "Done fuzzing dquot"
+done
# success, all done
status=0
diff --git a/tests/xfs/430 b/tests/xfs/430
index d94f65bd14..6f5c772dfb 100755
--- a/tests/xfs/430
+++ b/tests/xfs/430
@@ -27,9 +27,13 @@ echo "Format and populate"
_scratch_populate_cached nofill > $seqres.full 2>&1
echo "${MOUNT_OPTIONS}" | grep -q 'prjquota' || _notrun "project quota disabled"
-echo "Fuzz project 0 dquot"
-_scratch_xfs_fuzz_metadata '' 'online' "dquot -p 0" >> $seqres.full
-echo "Done fuzzing dquot"
+_scratch_xfs_set_quota_fuzz_ids
+
+for id in "${SCRATCH_XFS_QUOTA_FUZZ_IDS[@]}"; do
+ echo "Fuzz project $id dquot"
+ _scratch_xfs_fuzz_metadata '' 'online' "dquot -p $id" >> $seqres.full
+ echo "Done fuzzing dquot"
+done
# success, all done
status=0
diff --git a/tests/xfs/487 b/tests/xfs/487
index 337541bbcd..a688593950 100755
--- a/tests/xfs/487
+++ b/tests/xfs/487
@@ -28,9 +28,13 @@ echo "Format and populate"
_scratch_populate_cached nofill > $seqres.full 2>&1
echo "${MOUNT_OPTIONS}" | grep -q 'usrquota' || _notrun "user quota disabled"
-echo "Fuzz user 0 dquot"
-_scratch_xfs_fuzz_metadata '' 'none' "dquot -u 0" >> $seqres.full
-echo "Done fuzzing dquot"
+_scratch_xfs_set_quota_fuzz_ids
+
+for id in "${SCRATCH_XFS_QUOTA_FUZZ_IDS[@]}"; do
+ echo "Fuzz user $id dquot"
+ _scratch_xfs_fuzz_metadata '' 'none' "dquot -u $id" >> $seqres.full
+ echo "Done fuzzing dquot"
+done
# success, all done
status=0
diff --git a/tests/xfs/488 b/tests/xfs/488
index 4347768964..0d54ab8c7d 100755
--- a/tests/xfs/488
+++ b/tests/xfs/488
@@ -28,9 +28,13 @@ echo "Format and populate"
_scratch_populate_cached nofill > $seqres.full 2>&1
echo "${MOUNT_OPTIONS}" | grep -q 'grpquota' || _notrun "group quota disabled"
-echo "Fuzz group 0 dquot"
-_scratch_xfs_fuzz_metadata '' 'none' "dquot -g 0" >> $seqres.full
-echo "Done fuzzing dquot"
+_scratch_xfs_set_quota_fuzz_ids
+
+for id in "${SCRATCH_XFS_QUOTA_FUZZ_IDS[@]}"; do
+ echo "Fuzz group $id dquot"
+ _scratch_xfs_fuzz_metadata '' 'none' "dquot -g $id" >> $seqres.full
+ echo "Done fuzzing dquot"
+done
# success, all done
status=0
diff --git a/tests/xfs/489 b/tests/xfs/489
index c70e674ccc..012416f989 100755
--- a/tests/xfs/489
+++ b/tests/xfs/489
@@ -28,9 +28,13 @@ echo "Format and populate"
_scratch_populate_cached nofill > $seqres.full 2>&1
echo "${MOUNT_OPTIONS}" | grep -q 'prjquota' || _notrun "project quota disabled"
-echo "Fuzz project 0 dquot"
-_scratch_xfs_fuzz_metadata '' 'none' "dquot -p 0" >> $seqres.full
-echo "Done fuzzing dquot"
+_scratch_xfs_set_quota_fuzz_ids
+
+for id in "${SCRATCH_XFS_QUOTA_FUZZ_IDS[@]}"; do
+ echo "Fuzz project $id dquot"
+ _scratch_xfs_fuzz_metadata '' 'none' "dquot -p $id" >> $seqres.full
+ echo "Done fuzzing dquot"
+done
# success, all done
status=0
diff --git a/tests/xfs/779 b/tests/xfs/779
index fe0de3087a..05f2718632 100755
--- a/tests/xfs/779
+++ b/tests/xfs/779
@@ -29,9 +29,13 @@ echo "Format and populate"
_scratch_populate_cached nofill > $seqres.full 2>&1
echo "${MOUNT_OPTIONS}" | grep -q 'usrquota' || _notrun "user quota disabled"
-echo "Fuzz user 0 dquot"
-_scratch_xfs_fuzz_metadata '' 'both' "dquot -u 0" >> $seqres.full
-echo "Done fuzzing dquot"
+_scratch_xfs_set_quota_fuzz_ids
+
+for id in "${SCRATCH_XFS_QUOTA_FUZZ_IDS[@]}"; do
+ echo "Fuzz user $id dquot"
+ _scratch_xfs_fuzz_metadata '' 'both' "dquot -u $id" >> $seqres.full
+ echo "Done fuzzing dquot"
+done
# success, all done
status=0
diff --git a/tests/xfs/780 b/tests/xfs/780
index 0a23473538..9dd8f4527e 100755
--- a/tests/xfs/780
+++ b/tests/xfs/780
@@ -29,9 +29,13 @@ echo "Format and populate"
_scratch_populate_cached nofill > $seqres.full 2>&1
echo "${MOUNT_OPTIONS}" | grep -q 'grpquota' || _notrun "group quota disabled"
-echo "Fuzz group 0 dquot"
-_scratch_xfs_fuzz_metadata '' 'both' "dquot -g 0" >> $seqres.full
-echo "Done fuzzing dquot"
+_scratch_xfs_set_quota_fuzz_ids
+
+for id in "${SCRATCH_XFS_QUOTA_FUZZ_IDS[@]}"; do
+ echo "Fuzz group $id dquot"
+ _scratch_xfs_fuzz_metadata '' 'both' "dquot -g $id" >> $seqres.full
+ echo "Done fuzzing dquot"
+done
# success, all done
status=0
diff --git a/tests/xfs/781 b/tests/xfs/781
index ada0f8a1ca..604c9bdd87 100755
--- a/tests/xfs/781
+++ b/tests/xfs/781
@@ -29,9 +29,13 @@ echo "Format and populate"
_scratch_populate_cached nofill > $seqres.full 2>&1
echo "${MOUNT_OPTIONS}" | grep -q 'prjquota' || _notrun "project quota disabled"
-echo "Fuzz project 0 dquot"
-_scratch_xfs_fuzz_metadata '' 'both' "dquot -p 0" >> $seqres.full
-echo "Done fuzzing dquot"
+_scratch_xfs_set_quota_fuzz_ids
+
+for id in "${SCRATCH_XFS_QUOTA_FUZZ_IDS[@]}"; do
+ echo "Fuzz project $id dquot"
+ _scratch_xfs_fuzz_metadata '' 'both' "dquot -p $id" >> $seqres.full
+ echo "Done fuzzing dquot"
+done
# success, all done
status=0
^ permalink raw reply related [flat|nested] 8+ messages in thread