If there is a sub-memcg in a container, its swapout won't update
swap_max of the container's memcg, because we don't ascend the memcg
hierarchy in mem_cgroup_update_swap_max. This patch fixes this issue.

Fixes: a74376e2dde13 ("bc/memcg: show correct swap max for beancounters")
Signed-off-by: Vladimir Davydov <[email protected]>
---
 mm/memcontrol.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index dd3493073a2f..6a3ec8f3f276 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -903,12 +903,14 @@ static void mem_cgroup_update_swap_max(struct mem_cgroup 
*memcg)
 {
        long long swap;
 
-       swap = res_counter_read_u64(&memcg->memsw, RES_USAGE) -
-               res_counter_read_u64(&memcg->res, RES_USAGE);
+       for (; memcg; memcg = parent_mem_cgroup(memcg)) {
+               swap = res_counter_read_u64(&memcg->memsw, RES_USAGE) -
+                       res_counter_read_u64(&memcg->res, RES_USAGE);
 
-       /* This is racy, but we don't have to be absolutely precise */
-       if (swap > (long long)memcg->swap_max)
-               memcg->swap_max = swap;
+               /* This is racy, but we don't have to be absolutely precise */
+               if (swap > (long long)memcg->swap_max)
+                       memcg->swap_max = swap;
+       }
 }
 
 static void mem_cgroup_inc_failcnt(struct mem_cgroup *memcg,
-- 
2.1.4

_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to