Skip to content

Commit

Permalink
slub: use free_page instead of put_page for freeing kmalloc allocation
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Glauber Costa authored and Pekka Enberg committed Aug 16, 2012
1 parent 0d7614f commit d9b7f22
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion mm/slub.c
Original file line number Diff line number Diff line change
@@ -3477,7 +3477,7 @@ void kfree(const void *x)
if (unlikely(!PageSlab(page))) {
BUG_ON(!PageCompound(page));
kmemleak_free(x);
put_page(page);
__free_pages(page, compound_order(page));
return;
}
slab_free(page->slab, page, object, _RET_IP_);

0 comments on commit d9b7f22

Please sign in to comment.