mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 18:40:43 +03:00
Add Linux kmemleak support to ZTS
- Kmemleak `clear` is invoked right before every test case run.
- Kmemleak `scan` is requested right after each test case is finished.
- Kmemleak instrumentation is not used for
setup/cleanup/pretest/posttest/failsafe stages to shorten the test
case execution time.
- Kmemleak periodic scan is disabled (`scan=0`) before the test suite
run to avoid interfering with the on-demand scan results.
- There are unavoidable potential false positives coming from kernel
areas other than OpenZFS module.
- The ZTS with kmemleak enabled duration is increased by ~50%.
Example run
```
Running Time: 07:12:13
Percent passed: 98.3%
unreferenced object 0xffff9da82aea5410 (size 80):
comm "kworker/u32:10", pid 942206, jiffies 4296749716 (age 2615.516s)
hex dump (first 32 bytes):
00 30 30 00 00 00 00 00 ff 8f 30 00 00 00 00 00 .00.......0.....
51 e6 77 05 a8 9d ff ff 00 00 00 00 00 00 00 00 Q.w.............
backtrace:
[<000000005cf1fea2>] alloc_extent_state+0x1d/0xb0 [btrfs]
[<0000000083f78ae5>] set_extent_bit+0x2ff/0x670 [btrfs]
[<00000000de29249e>] lock_extent_bits+0x6b/0xa0 [btrfs]
[<00000000b241f424>] lock_and_cleanup_extent_if_need+0xaf/0x1c0
[btrfs]
[<0000000093ca72b5>] btrfs_buffered_write+0x297/0x7d0 [btrfs]
[<000000002c2938c8>] btrfs_file_write_iter+0x127/0x390 [btrfs]
[<00000000b888f720>] do_iter_readv_writev+0x152/0x1b0
[<00000000320f0bcc>] do_iter_write+0x7c/0x1c0
[<000000000b5a8fe0>] lo_write_bvec+0x62/0x150 [loop]
[<000000009aa03c73>] loop_process_work+0x250/0xbd0 [loop]
[<00000000c7487d8a>] process_one_work+0x1f1/0x390
[<000000000b236831>] worker_thread+0x53/0x3e0
[<0000000023cb3e57>] kthread+0x127/0x150
[<000000002d48676a>] ret_from_fork+0x22/0x30
```
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Signed-off-by: szubersk <szuberskidamian@gmail.com>
Closes #13084
This commit is contained in:
+15
-4
@@ -54,6 +54,7 @@ ZFS_DBGMSG="$STF_SUITE/callbacks/zfs_dbgmsg.ksh"
|
||||
ZFS_DMESG="$STF_SUITE/callbacks/zfs_dmesg.ksh"
|
||||
UNAME=$(uname -s)
|
||||
RERUN=""
|
||||
KMEMLEAK=""
|
||||
|
||||
# Override some defaults if on FreeBSD
|
||||
if [ "$UNAME" = "FreeBSD" ] ; then
|
||||
@@ -329,6 +330,7 @@ OPTIONS:
|
||||
-S Enable stack tracer (negative performance impact)
|
||||
-c Only create and populate constrained path
|
||||
-R Automatically rerun failing tests
|
||||
-m Enable kmemleak reporting (Linux only)
|
||||
-n NFSFILE Use the nfsfile to determine the NFS configuration
|
||||
-I NUM Number of iterations
|
||||
-d DIR Use DIR for files and loopback devices
|
||||
@@ -355,7 +357,7 @@ $0 -x
|
||||
EOF
|
||||
}
|
||||
|
||||
while getopts 'hvqxkfScRn:d:s:r:?t:T:u:I:' OPTION; do
|
||||
while getopts 'hvqxkfScRmn:d:s:r:?t:T:u:I:' OPTION; do
|
||||
case $OPTION in
|
||||
h)
|
||||
usage
|
||||
@@ -386,6 +388,9 @@ while getopts 'hvqxkfScRn:d:s:r:?t:T:u:I:' OPTION; do
|
||||
R)
|
||||
RERUN="yes"
|
||||
;;
|
||||
m)
|
||||
KMEMLEAK="yes"
|
||||
;;
|
||||
n)
|
||||
nfsfile=$OPTARG
|
||||
[ -f "$nfsfile" ] || fail "Cannot read file: $nfsfile"
|
||||
@@ -695,12 +700,16 @@ fi
|
||||
#
|
||||
# Run all the tests as specified.
|
||||
#
|
||||
msg "${TEST_RUNNER} ${QUIET:+-q}" \
|
||||
msg "${TEST_RUNNER}" \
|
||||
"${QUIET:+-q}" \
|
||||
"${KMEMLEAK:+-m}" \
|
||||
"-c \"${RUNFILES}\"" \
|
||||
"-T \"${TAGS}\"" \
|
||||
"-i \"${STF_SUITE}\"" \
|
||||
"-I \"${ITERATIONS}\""
|
||||
{ ${TEST_RUNNER} ${QUIET:+-q} \
|
||||
{ ${TEST_RUNNER} \
|
||||
${QUIET:+-q} \
|
||||
${KMEMLEAK:+-m} \
|
||||
-c "${RUNFILES}" \
|
||||
-T "${TAGS}" \
|
||||
-i "${STF_SUITE}" \
|
||||
@@ -722,7 +731,9 @@ if [ "$RESULT" -eq "2" ] && [ -n "$RERUN" ]; then
|
||||
for test_name in $MAYBES; do
|
||||
grep "$test_name " "$TEMP_RESULTS_FILE" >>"$TEST_LIST"
|
||||
done
|
||||
{ ${TEST_RUNNER} ${QUIET:+-q} \
|
||||
{ ${TEST_RUNNER} \
|
||||
${QUIET:+-q} \
|
||||
${KMEMLEAK:+-m} \
|
||||
-c "${RUNFILES}" \
|
||||
-T "${TAGS}" \
|
||||
-i "${STF_SUITE}" \
|
||||
|
||||
Reference in New Issue
Block a user