diff options
| author | 2023-06-30 08:41:39 -0700 | |
|---|---|---|
| committer | 2023-06-30 08:41:39 -0700 | |
| commit | 44f10dbefd5e41b3385af91f855a57aa2afaf40e (patch) | |
| tree | 944c9f1cda8322691468e6f10dc5b0d41c487621 /kernel/fork.c | |
| parent | Merge branch 'master' into mm-hotfixes-stable (diff) | |
| parent | csky: fix up lock_mm_and_find_vma() conversion (diff) | |
| download | wireguard-linux-44f10dbefd5e41b3385af91f855a57aa2afaf40e.tar.xz wireguard-linux-44f10dbefd5e41b3385af91f855a57aa2afaf40e.zip | |
Merge branch 'master' into mm-hotfixes-stable
Diffstat (limited to 'kernel/fork.c')
| -rw-r--r-- | kernel/fork.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/kernel/fork.c b/kernel/fork.c index 41c964104b58..b85814e614a5 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; } |
