summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarrick J. Wong <djwong@kernel.org>2022-08-02 21:22:40 -0700
committerZorro Lang <zlang@kernel.org>2022-09-04 21:44:05 +0800
commitde3717ae0985b9cda9d99a1290dbb5d8915cf089 (patch)
treed24cb5d570ef8950891b99cdb6b55fc908cec1af
parent4f929ebc59285d47f8a79c3d3f1e5f4ce316d6d0 (diff)
downloadxfstests-de3717ae0985b9cda9d99a1290dbb5d8915cf089.tar.zst
common: filter internal errors during io error testing
The goal of an EIO shutdown test is to examine the shutdown and recovery behavior if we make the underlying storage device return EIO. On XFS, it's possible that the shutdown will come from a thread that cancels a dirty transaction due to the EIO. This is expected behavior, but _check_dmesg will flag it as a test failure. Make it so that we can add simple regexps to the default check_dmesg filter function, then add the "Internal error" string to filter function when we invoke an EIO test. This fixes periodic regressions in generic/019 and generic/475. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Zorro Lang <zlang@redhat.com> Signed-off-by: Zorro Lang <zlang@kernel.org>
-rwxr-xr-xcheck1
-rw-r--r--common/rc19
-rw-r--r--common/xfs7
3 files changed, 26 insertions, 1 deletions
diff --git a/check b/check
index 0b2f10ed..000e31cb 100755
--- a/check
+++ b/check
@@ -896,6 +896,7 @@ function run_section()
echo "run fstests $seqnum at $date_time" > /dev/kmsg
# _check_dmesg depends on this log in dmesg
touch ${RESULT_DIR}/check_dmesg
+ rm -f ${RESULT_DIR}/dmesg_filter
fi
_try_wipe_scratch_devs > /dev/null 2>&1
diff --git a/common/rc b/common/rc
index 27767885..a25cbcd0 100644
--- a/common/rc
+++ b/common/rc
@@ -4171,8 +4171,25 @@ _check_dmesg_for()
# lockdep.
_check_dmesg_filter()
{
+ local extra_filter=
+ local filter_file="${RESULT_DIR}/dmesg_filter"
+
+ test -e "$filter_file" && extra_filter="-f $filter_file"
+
egrep -v -e "BUG: MAX_LOCKDEP_CHAIN_HLOCKS too low" \
- -e "BUG: MAX_STACK_TRACE_ENTRIES too low"
+ -e "BUG: MAX_STACK_TRACE_ENTRIES too low" \
+ $extra_filter
+}
+
+# Add a simple expression to the default dmesg filter
+_add_dmesg_filter()
+{
+ local regexp="$1"
+ local filter_file="${RESULT_DIR}/dmesg_filter"
+
+ if [ ! -e "$filter_file" ] || ! grep -q "$regexp" "$filter_file"; then
+ echo "$regexp" >> "${RESULT_DIR}/dmesg_filter"
+ fi
}
# check dmesg log for WARNING/Oops/etc.
diff --git a/common/xfs b/common/xfs
index 65234c8b..ae81b3fe 100644
--- a/common/xfs
+++ b/common/xfs
@@ -841,6 +841,13 @@ _xfs_prepare_for_eio_shutdown()
local dev="$1"
local ctlfile="error/fail_at_unmount"
+ # Once we enable IO errors, it's possible that a writer thread will
+ # trip over EIO, cancel the transaction, and shut down the system.
+ # This is expected behavior, so we need to remove the "Internal error"
+ # message from the list of things that can cause the test to be marked
+ # as failed.
+ _add_dmesg_filter "Internal error"
+
# Don't retry any writes during the (presumably) post-shutdown unmount
_has_fs_sysfs "$ctlfile" && _set_fs_sysfs_attr $dev "$ctlfile" 1