[PATCH RFC 0/5] allow kfree_nolock() handle kmalloc() objects

From: Vlastimil Babka (SUSE)

Date: Fri Aug 07 2026 - 09:55:34 EST


This is an initial RFC for something that could target 7.4 and
definitely not earlier merge window. Based on
slab/for-7.3/kfree_rcu_nolock

Currently kfree_nolock() can only handle objects from kmalloc_nolock().
Removing this restriction means an easier to use API and might be useful
in some situations. It means dealing properly with kfence, kmemleak and
large kmalloc allocations. Some of the cases may end up being deferred
to the irq_wor() but that's not a big issue.

As a example of usefullness, convert a kfree_rcu() to kfree_nolock() in
the scheduler code, where kfree_rcu() has been used as a workaround for
kfree() being unsafe to call under pi_lock.

Signed-off-by: Vlastimil Babka (SUSE) <vbabka@xxxxxxxxxx>
---
Vlastimil Babka (SUSE) (5):
mm/slab: cleanup deferred free handling
mm/slab, kfence: support kfence objects in kfree_nolock()
mm/slab, kmemleak: handle kmemleak freeing in kfree_nolock()
mm/slab: handle large_kmalloc objects in kfree_nolock()
sched: use kfree_nolock() instead of kfree_rcu()

include/linux/kfence.h | 5 ++
include/linux/kmemleak.h | 17 +++++
kernel/sched/core.c | 9 +--
kernel/sched/sched.h | 7 +--
mm/kfence/core.c | 14 +++++
mm/kfence/kfence.h | 5 +-
mm/kmemleak.c | 42 +++++++++++++
mm/slub.c | 157 +++++++++++++++++++++++++++++++++++++++--------
8 files changed, 215 insertions(+), 41 deletions(-)
---
base-commit: 648294a02bfcd0eddae51877e3b30f8bbb2d4bb6
change-id: 20260730-kfree_nolock_kmalloc-6067170fd5ad