aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunaid Shahid <[email protected]>2018-06-07 17:07:31 -0700
committerLinus Torvalds <[email protected]>2018-06-07 17:34:36 -0700
commitd12c60f64cf8c768fddfd848eaf7ee57a13f18b1 (patch)
treea85f422f1f49ede486955d820b9023ac90fa5dfe
parentbb4a7ea2b1449722cec9d787dca5a74ca36e8eeb (diff)
mm: memcontrol: drain memcg stock on force_empty
The per-cpu memcg stock can retain a charge of upto 32 pages. On a machine with large number of cpus, this can amount to a decent amount of memory. Additionally force_empty interface might be triggering unneeded memcg reclaims. Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Junaid Shahid <[email protected]> Signed-off-by: Shakeel Butt <[email protected]> Acked-by: Michal Hocko <[email protected]> Cc: Greg Thelen <[email protected]> Cc: Johannes Weiner <[email protected]> Cc: Vladimir Davydov <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
-rw-r--r--mm/memcontrol.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 18dcdac0b158..e6de0d6a3a8d 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -2610,6 +2610,9 @@ static int mem_cgroup_force_empty(struct mem_cgroup *memcg)
/* we call try-to-free pages for make this cgroup empty */
lru_add_drain_all();
+
+ drain_all_stock(memcg);
+
/* try to free all pages in this cgroup */
while (nr_retries && page_counter_read(&memcg->memory)) {
int progress;