summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlauber Costa <glommer@parallels.com>2012-08-03 22:51:37 +0400
committerPekka Enberg <penberg@kernel.org>2012-08-16 09:25:03 +0300
commitd9b7f22623b5fa9cc189581dcdfb2ac605933bf4 (patch)
tree6287535fbe9d67a743c2c16551042447a1e7d424
parent0d7614f09c1ebdbaa1599a5aba7593f147bf96ee (diff)
downloadblackbird-obmc-linux-d9b7f22623b5fa9cc189581dcdfb2ac605933bf4.tar.gz
blackbird-obmc-linux-d9b7f22623b5fa9cc189581dcdfb2ac605933bf4.zip
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>
-rw-r--r--mm/slub.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/mm/slub.c b/mm/slub.c
index 8f78e2577031..c83fe96f5e42 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -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_);
OpenPOWER on IntegriCloud