mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-07 13:43:51 +00:00
slub: use free_page instead of put_page for freeing kmalloc allocation
When freeing objects, the slub allocator will most of the time free empty pages by calling __free_pages(). But high-order kmalloc will be diposed by means of put_page() instead. It makes no sense to call put_page() in kernel pages that are provided by the object allocators, so we shouldn't be doing this ourselves. Aside from the consistency change, we don't change the flow too much. put_page()'s would call its dtor function, which is __free_pages. We also already do all of the Compound page tests ourselves, and the Mlock test we lose don't really matter. Signed-off-by: Glauber Costa <glommer@parallels.com> Acked-by: Christoph Lameter <cl@linux.com> CC: David Rientjes <rientjes@google.com> CC: Pekka Enberg <penberg@kernel.org> Signed-off-by: Pekka Enberg <penberg@kernel.org>
This commit is contained in:
parent
0d7614f09c
commit
d9b7f22623
@ -3477,7 +3477,7 @@ void kfree(const void *x)
|
|||||||
if (unlikely(!PageSlab(page))) {
|
if (unlikely(!PageSlab(page))) {
|
||||||
BUG_ON(!PageCompound(page));
|
BUG_ON(!PageCompound(page));
|
||||||
kmemleak_free(x);
|
kmemleak_free(x);
|
||||||
put_page(page);
|
__free_pages(page, compound_order(page));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
slab_free(page->slab, page, object, _RET_IP_);
|
slab_free(page->slab, page, object, _RET_IP_);
|
||||||
|
Loading…
Reference in New Issue
Block a user