Re: [PATCH 4/4] rhashtable: fix vmalloc() deadlock in atomic rehash

From: Matthew Wilcox

Date: Thu Oct 29 2026 - 16:03:04 EST


On Wed, Oct 28, 2026 at 11:42:18AM -0400, Liam R. Howlett (Google) wrote:
> Below, one CPU adds an FDB entry for an RTM_NEWNEIGH netlink request,
> while another CPU is inside vmalloc() or vfree():
>
> RTM_NEWNEIGH vmalloc() or vfree()
> ============ ====================
> spin_lock_bh(&br->hash_lock)
> spin_lock(&vn->busy.lock)
> rhashtable_insert_rehash()
> kvmalloc(GFP_ATOMIC)
> vmalloc()
> spin_lock(&vn->busy.lock)
> waits for the other CPU
> softirq: a frame for the bridge
> spin_lock(&br->hash_lock)
> waits for RTM_NEWNEIGH

This seems like the kind of deadlock that lockdep can catch. Why
hasn't it? Do we need to add a fake lock for RTM_NEWNEIGH?