Re: [PATCH v2] mm/kmemleak: avoid soft lockup when scanning task stacks

From: Breno Leitao

Date: Mon Jun 15 2026 - 05:27:42 EST


Hello Catalin,

On Fri, Jun 12, 2026 at 06:11:40PM +0100, Catalin Marinas wrote:
> Thanks for addressing this long-standing soft lockup problem.

Happy to help. We run kmemleak on several hosts in Meta's fleet, and
I'm working to improve stability for those systems.

> Yet anther variant below, untested. Basically, it follows the
> next_tgid() or task_seq_get_next() approach (we might as well move this
> to a separate function to avoid excessive indentation):

This is excellent. I explored similar approaches before proposing the
horrendous array-based solution in v1, but didn't arrive at anything
that would work. Thanks!

> if (kmemleak_stack_scan) {
> struct pid *pid;
> int nr = 1;
>
> do {
> struct task_struct *p = NULL;
>
> rcu_read_lock();
> pid = find_ge_pid(nr, &init_pid_ns);
> if (pid) {
> nr = pid_nr(pid) + 1;
> p = pid_task(pid, PIDTYPE_PID);
> if (p)
> get_task_struct(p);
> }
> rcu_read_unlock();
>
> if (p) {
> void *stack = try_get_task_stack(p);
>
> if (stack) {
> scan_block(stack, stack + THREAD_SIZE,
> NULL);
> put_task_stack(p);
> }
> put_task_struct(p);
> }

Should we add a scan_should_stop() check here to allow early
termination?

Thanks,
--breno