Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d9b7f226 authored by Glauber Costa's avatar Glauber Costa Committed by Pekka Enberg
Browse files

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: default avatarGlauber Costa <glommer@parallels.com>
Acked-by: default avatarChristoph Lameter <cl@linux.com>
CC: David Rientjes <rientjes@google.com>
CC: Pekka Enberg <penberg@kernel.org>
Signed-off-by: default avatarPekka Enberg <penberg@kernel.org>
parent 0d7614f0
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -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_);