]> git-server-git.apps.pok.os.sepia.ceph.com Git - xfstests-dev.git/commitdiff
check: detect and preserve all coredumps made by a test
authorDarrick J. Wong <djwong@kernel.org>
Fri, 14 Oct 2022 18:20:20 +0000 (11:20 -0700)
committerZorro Lang <zlang@kernel.org>
Sat, 15 Oct 2022 04:48:38 +0000 (12:48 +0800)
If someone sets kernel.core_uses_pid (or kernel.core_pattern), any
coredumps generated by fstests might have names that are longer than
just "core".  Since the pid isn't all that useful by itself, let's
record the coredumps by hash when we save them, so that we don't waste
space storing identical crash dumps.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Zorro Lang <zlang@redhat.com>
Signed-off-by: Zorro Lang <zlang@kernel.org>
check
common/rc

diff --git a/check b/check
index af23572ccc4c7f496f708ec9a316d885dece7083..a880d52f500090776173cd7c5f83e955bf45bb35 100755 (executable)
--- a/check
+++ b/check
@@ -913,11 +913,19 @@ function run_section()
                        sts=$?
                fi
 
-               if [ -f core ]; then
-                       _dump_err_cont "[dumped core]"
-                       mv core $RESULT_BASE/$seqnum.core
+               # If someone sets kernel.core_pattern or kernel.core_uses_pid,
+               # coredumps generated by fstests might have a longer name than
+               # just "core".  Use globbing to find the most common patterns,
+               # assuming there are no other coredump capture packages set up.
+               local cores=0
+               for i in core core.*; do
+                       test -f "$i" || continue
+                       if ((cores++ == 0)); then
+                               _dump_err_cont "[dumped core]"
+                       fi
+                       (_adjust_oom_score 250; _save_coredump "$i")
                        tc_status="fail"
-               fi
+               done
 
                if [ -f $seqres.notrun ]; then
                        $timestamp && _timestamp
@@ -950,6 +958,16 @@ function run_section()
                        # of the check script itself.
                        (_adjust_oom_score 250; _check_filesystems) || tc_status="fail"
                        _check_dmesg || tc_status="fail"
+
+                       # Save any coredumps from the post-test fs checks
+                       for i in core core.*; do
+                               test -f "$i" || continue
+                               if ((cores++ == 0)); then
+                                       _dump_err_cont "[dumped core]"
+                               fi
+                               (_adjust_oom_score 250; _save_coredump "$i")
+                               tc_status="fail"
+                       done
                fi
 
                # Reload the module after each test to check for leaks or
index d877ac77a0b5767bfc6dc1bcbf70a6dd7b5ffe73..1a0f167f84a7bc33fe23fd58c5ee99106de91d5a 100644 (file)
--- a/common/rc
+++ b/common/rc
@@ -4949,6 +4949,28 @@ _create_file_sized()
        return $ret
 }
 
+# Save an arbitrary coredump to the report directory.
+_save_coredump()
+{
+       local path="$1"
+
+       if [ -z "$seqres" ]; then
+               echo "$path: seqres is not defined; ignoring coredump!"
+               return 1
+       fi
+
+       local core_hash="$(_md5_checksum "$path")"
+       local out_file="${seqres}.core.${core_hash}"
+
+       if [ -s "$out_file" ]; then
+               rm -f "$path"
+               return
+       fi
+       rm -f "$out_file"
+
+       mv "$path" "$out_file"
+}
+
 init_rc
 
 ################################################################################