[Devel] [PATCH RHEL7 COMMIT] memcg: fix swap_max calculation for nested cgroups

Konstantin Khorenko khorenko at virtuozzo.com
Fri Aug 28 07:36:03 PDT 2015


The commit is pushed to "branch-rh7-3.10.0-229.7.2-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-229.7.2.vz7.6.3
------>
commit 338ce9637d706f2bf01ef9153b78953ff65c2efb
Author: Vladimir Davydov <vdavydov at parallels.com>
Date:   Fri Aug 28 18:36:03 2015 +0400

    memcg: fix swap_max calculation for nested cgroups
    
    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 <vdavydov at parallels.com>
---
 mm/memcontrol.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 5f3e0ac..7fc2931 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,



More information about the Devel mailing list