Re: [PATCH v2] mm, slub: emit the "free" trace report before freeing memory in kmem_cache_free()

From: Vlastimil Babka
Date: Tue Nov 02 2021 - 10:39:23 EST


On 11/2/21 14:53, Tang Yizhou wrote:
> On 2021/11/2 19:43, Yunfeng Ye wrote:
>> --- a/mm/slub.c
>> +++ b/mm/slub.c
>> @@ -3526,8 +3526,8 @@ void kmem_cache_free(struct kmem_cache *s, void *x)
>> s = cache_from_obj(s, x);
>> if (!s)
>> return;
>> - slab_free(s, virt_to_head_page(x), x, NULL, 1, _RET_IP_);
>> trace_kmem_cache_free(_RET_IP_, x, s->name);
>> + slab_free(s, virt_to_head_page(x), x, NULL, 1, _RET_IP_);
>> }
>
> It seems that kmem_cache_free() in mm/slab.c has the same problem.
> We can fix it. Thanks.

Doh, true. Should go best before the local_irq_save() there.
And also kmem_cache_free() in mm/slob.c.

Interestingly kfree() is already OK in all 3 implementations.

>> EXPORT_SYMBOL(kmem_cache_free);
>>
>