aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
Diffstat (limited to 'mm')
-rw-r--r--mm/memcontrol.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index fe51d5e61389..9e7a4e521917 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -2381,13 +2381,14 @@ int __memcg_kmem_charge_memcg(struct page *page, gfp_t gfp, int order,
2381 if (!memcg_kmem_online(memcg)) 2381 if (!memcg_kmem_online(memcg))
2382 return 0; 2382 return 0;
2383 2383
2384 if (!page_counter_try_charge(&memcg->kmem, nr_pages, &counter))
2385 return -ENOMEM;
2386
2387 ret = try_charge(memcg, gfp, nr_pages); 2384 ret = try_charge(memcg, gfp, nr_pages);
2388 if (ret) { 2385 if (ret)
2389 page_counter_uncharge(&memcg->kmem, nr_pages);
2390 return ret; 2386 return ret;
2387
2388 if (!cgroup_subsys_on_dfl(memory_cgrp_subsys) &&
2389 !page_counter_try_charge(&memcg->kmem, nr_pages, &counter)) {
2390 cancel_charge(memcg, nr_pages);
2391 return -ENOMEM;
2391 } 2392 }
2392 2393
2393 page->mem_cgroup = memcg; 2394 page->mem_cgroup = memcg;
@@ -2416,7 +2417,9 @@ void __memcg_kmem_uncharge(struct page *page, int order)
2416 2417
2417 VM_BUG_ON_PAGE(mem_cgroup_is_root(memcg), page); 2418 VM_BUG_ON_PAGE(mem_cgroup_is_root(memcg), page);
2418 2419
2419 page_counter_uncharge(&memcg->kmem, nr_pages); 2420 if (!cgroup_subsys_on_dfl(memory_cgrp_subsys))
2421 page_counter_uncharge(&memcg->kmem, nr_pages);
2422
2420 page_counter_uncharge(&memcg->memory, nr_pages); 2423 page_counter_uncharge(&memcg->memory, nr_pages);
2421 if (do_memsw_account()) 2424 if (do_memsw_account())
2422 page_counter_uncharge(&memcg->memsw, nr_pages); 2425 page_counter_uncharge(&memcg->memsw, nr_pages);
@@ -2922,7 +2925,8 @@ static int memcg_propagate_kmem(struct mem_cgroup *memcg)
2922 * onlined after this point, because it has at least one child 2925 * onlined after this point, because it has at least one child
2923 * already. 2926 * already.
2924 */ 2927 */
2925 if (memcg_kmem_online(parent)) 2928 if (cgroup_subsys_on_dfl(memory_cgrp_subsys) ||
2929 memcg_kmem_online(parent))
2926 ret = memcg_online_kmem(memcg); 2930 ret = memcg_online_kmem(memcg);
2927 mutex_unlock(&memcg_limit_mutex); 2931 mutex_unlock(&memcg_limit_mutex);
2928 return ret; 2932 return ret;