Re: [PATCH for-next v3 4/9] mm/slab: use call_rcu() in unknown context if irqs are enabled

From: Harry Yoo

Date: Mon Jun 29 2026 - 04:19:31 EST




On 6/24/26 11:30 PM, Pedro Falcato wrote:
> On Mon, Jun 15, 2026 at 08:05:58PM +0900, Harry Yoo (Oracle) wrote:
>> call_rcu() disables IRQs with local_irq_save() to protect its per-cpu
>> data structures. Therefore, if IRQs are not disabled, they cannot be
>> corrupted by reentrance into call_rcu(). So fall back to the deferred
>> path only when !allow_spin && irqs_disabled().
>>
>> The RCU subsystem does not guarantee this contractually, and this
>> optimization relies on RCU's implementation details. Ideally, it should
>> be removed once call_rcu_nolock() is supported by the RCU subsystem.
>>
>> Link: https://lore.kernel.org/linux-mm/CAADnVQKRVD5ZSnEKbZZU7w86gHbGHUug2pvzpgZTngNS+fg4rw@xxxxxxxxxxxxxx
>> Suggested-by: Alexei Starovoitov <ast@xxxxxxxxxx>
>> Signed-off-by: Harry Yoo (Oracle) <harry@xxxxxxxxxx>
>> ---
>> mm/slub.c | 4 ++--
>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/mm/slub.c b/mm/slub.c
>> index b0d38d515386..6a3552b70683 100644
>> --- a/mm/slub.c
>> +++ b/mm/slub.c
>> @@ -6158,8 +6158,8 @@ bool __kfree_rcu_sheaf(struct kmem_cache *s, void *obj, bool allow_spin)
>> if (likely(rcu_sheaf->size < s->sheaf_capacity)) {
>> rcu_sheaf = NULL;
>> } else {
>> - if (unlikely(!allow_spin)) {
>> - /* call_rcu() cannot be called in an unknown context */
>> + /* call_rcu() disables IRQs to protect percpu data structures */
>> + if (unlikely(!allow_spin && irqs_disabled())) {
>
> Perhaps this could be more neatly exposed by RCU? something like
> maybe_in_call_rcu().

Make sense if we need to keep this optimization for a long time, but
hopefully RCU would support call_rcu_nolock() soon (apparently Paul has
a plan [1]), rather than introducing maybe_in_call_rcu() just to drop
it soon.

But I don't have a strong opinion on this and
I'd leave that to RCU folks.

> Also, it's a bit odd that you're introducing code and
> then subsequently patching over it with an improvement. Maybe this could be
> squashed into patch 3?

I was hoping having it as a separate patch to make it easier for RCU
folks to take a look and provide ack or nack :)

[1]
https://lore.kernel.org/linux-mm/03da8742-3790-4428-84b8-11911bf44c9e@paulmck-laptop/

--
Cheers,
Harry / Hyeonggon

Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature