[PATCH v3 0/3] mm/kmemleak: avoid soft lockup when scanning task stacks
From: Breno Leitao
Date: Mon Jun 15 2026 - 13:51:53 EST
kmemleak_scan() scans every task stack under one rcu_read_lock() with no
reschedule point, which can trip the soft lockup watchdog on hosts with
very many threads.
That prints the following message, depending on the workload+host
configuration:
watchdog: BUG: soft lockup - CPU#35 stuck for 22s! [kmemleak:537]
scan_block
kmemleak_scan
kmemleak_scan_thread
kthread
Patch 1 walks the tasks with find_ge_pid() so the scan reschedules between
tasks
Patches 2-3 let the scan loops stop early once a scan is interrupted.
Signed-off-by: Breno Leitao <leitao@xxxxxxxxxx>
---
Changes in v3:
- Rework the task stack walk to use find_ge_pid() instead of v1's array
and v2's rcu_lock_break() helper (Catalin).
- Add two follow-up patches letting scan_block() report an interrupted
scan so the scan loops stop early.
- Link to v2: https://lore.kernel.org/r/20260612-kmemleak-stack-resched-v2-1-53240de79e88@xxxxxxxxxx
Changes in v2:
- Do not create the nasty array, but use the same pattern as
kernel/hung_task.c.
- Link to v1: https://lore.kernel.org/r/20260611-kmemleak-stack-resched-v1-1-d6248ade5f4a@xxxxxxxxxx
---
Breno Leitao (3):
mm/kmemleak: avoid soft lockup when scanning task stacks
mm/kmemleak: stop the task stack scan early when interrupted
mm/kmemleak: stop the per-cpu and struct page scans early too
mm/kmemleak.c | 88 +++++++++++++++++++++++++++++++++++++++++++----------------
1 file changed, 65 insertions(+), 23 deletions(-)
---
base-commit: abe651837cb394f76d738a7a747322fca3bf17ba
change-id: 20260611-kmemleak-stack-resched-01ed72858a7f
Best regards,
--
Breno Leitao <leitao@xxxxxxxxxx>