]> git.karo-electronics.de Git - karo-tx-linux.git/commit
zsmalloc: fix obj_to_head use page_private(page) as value but not pointer
authorHui Zhu <zhuhui@xiaomi.com>
Wed, 21 Oct 2015 22:03:28 +0000 (09:03 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Wed, 21 Oct 2015 22:03:28 +0000 (09:03 +1100)
commite713e03b5a52713b4c50f98a39a0b3dad7e66832
treea743a53718c66d1b882b0a256351a9aab3d27807
parentf128e0ed866aa39dc4e43866fa8c886896b3b3cc
zsmalloc: fix obj_to_head use page_private(page) as value but not pointer

In obj_malloc():

if (!class->huge)
/* record handle in the header of allocated chunk */
link->handle = handle;
else
/* record handle in first_page->private */
set_page_private(first_page, handle);

In the hugepage we save handle to private directly.

But in obj_to_head():

if (class->huge) {
VM_BUG_ON(!is_first_page(page));
return *(unsigned long *)page_private(page);
} else
return *(unsigned long *)obj;

It is used as a pointer.

The reason why there is no problem until now is huge-class page is born
with ZS_FULL so it can't be migrated.  However, we need this patch for
future work: "VM-aware zsmalloced page migration" to reduce external
fragmentation.

Signed-off-by: Hui Zhu <zhuhui@xiaomi.com>
Acked-by: Minchan Kim <minchan@kernel.org>
Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/zsmalloc.c