X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=kernel%2Ffork.c;h=b85814e614a58fc800b5107220a4084f5835bfeb;hb=dd546618ba704be4f3724a11e5a194052c551f08;hp=41c964104b5841f421d04b9424967895429ee22b;hpb=a3540495324af9b7fa95b62da2ccbf7cdb4e3622;p=platform%2Fkernel%2Flinux-rpi.git diff --git a/kernel/fork.c b/kernel/fork.c index 41c9641..b85814e 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -252,23 +252,19 @@ static int memcg_charge_kernel_stack(struct vm_struct *vm) { int i; int ret; + int nr_charged = 0; - BUILD_BUG_ON(IS_ENABLED(CONFIG_VMAP_STACK) && PAGE_SIZE % 1024 != 0); BUG_ON(vm->nr_pages != THREAD_SIZE / PAGE_SIZE); for (i = 0; i < THREAD_SIZE / PAGE_SIZE; i++) { ret = memcg_kmem_charge_page(vm->pages[i], GFP_KERNEL, 0); if (ret) goto err; + nr_charged++; } return 0; err: - /* - * If memcg_kmem_charge_page() fails, page's memory cgroup pointer is - * NULL, and memcg_kmem_uncharge_page() in free_thread_stack() will - * ignore this page. - */ - for (i = 0; i < THREAD_SIZE / PAGE_SIZE; i++) + for (i = 0; i < nr_charged; i++) memcg_kmem_uncharge_page(vm->pages[i], 0); return ret; }