The commit is pushed to "branch-rh7-3.10.0-123.1.2-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after rh7-3.10.0-123.1.2.vz7.5.22 ------> commit e651dfc30632e241a0ce5758c9a4c5e9d4a6935b Author: Vladimir Davydov <vdavy...@parallels.com> Date: Mon Jun 29 17:37:26 2015 +0400
memcg/ub: fix limit > RESOURCE_MAX case A memcg limit can be greater than RESOURCE_MAX (LLONG_MAX), because it is rounded up to PAGE_SIZE. As a result, we will show huge numbers in meminfo for unlimited containers instead of the host's configuration. Fix this by making all limit-vs-RESOURCE_MAX comparisons use greater-or-equal sign. Signed-off-by: Vladimir Davydov <vdavy...@parallels.com> Reviewed-by: Kirill Tkhai <ktk...@odin.com> --- mm/memcontrol.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index cb153ac..50eefe3 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1648,7 +1648,7 @@ unsigned long mem_cgroup_total_pages(struct mem_cgroup *memcg, bool swap) limit = swap ? res_counter_read_u64(&memcg->memsw, RES_LIMIT) : res_counter_read_u64(&memcg->res, RES_LIMIT); - if (limit == RESOURCE_MAX) + if (limit >= RESOURCE_MAX) return ULONG_MAX; return min_t(unsigned long long, ULONG_MAX, limit >> PAGE_SHIFT); } @@ -5388,7 +5388,7 @@ void mem_cgroup_sync_beancounter(struct mem_cgroup *memcg, p->maxheld = res_counter_read_u64(&memcg->res, RES_MAX_USAGE) >> PAGE_SHIFT; p->failcnt = atomic_long_read(&memcg->mem_failcnt); lim = res_counter_read_u64(&memcg->res, RES_LIMIT); - lim = lim == RESOURCE_MAX ? UB_MAXVALUE : + lim = lim >= RESOURCE_MAX ? UB_MAXVALUE : min_t(unsigned long long, lim >> PAGE_SHIFT, UB_MAXVALUE); p->barrier = p->limit = lim; @@ -5396,7 +5396,7 @@ void mem_cgroup_sync_beancounter(struct mem_cgroup *memcg, k->maxheld = res_counter_read_u64(&memcg->kmem, RES_MAX_USAGE); k->failcnt = res_counter_read_u64(&memcg->kmem, RES_FAILCNT); lim = res_counter_read_u64(&memcg->kmem, RES_LIMIT); - lim = lim == RESOURCE_MAX ? UB_MAXVALUE : + lim = lim >= RESOURCE_MAX ? UB_MAXVALUE : min_t(unsigned long long, lim, UB_MAXVALUE); k->barrier = k->limit = lim; @@ -5410,7 +5410,7 @@ void mem_cgroup_sync_beancounter(struct mem_cgroup *memcg, maxheld = memcg->swap_max >> PAGE_SHIFT; s->failcnt = atomic_long_read(&memcg->swap_failcnt); lim = res_counter_read_u64(&memcg->memsw, RES_LIMIT); - lim = lim == RESOURCE_MAX ? UB_MAXVALUE : + lim = lim >= RESOURCE_MAX ? UB_MAXVALUE : min_t(unsigned long long, lim >> PAGE_SHIFT, UB_MAXVALUE); if (lim != UB_MAXVALUE) lim -= p->limit; @@ -5425,7 +5425,7 @@ void mem_cgroup_sync_beancounter(struct mem_cgroup *memcg, o->maxheld = res_counter_read_u64(&memcg->memsw, RES_MAX_USAGE) >> PAGE_SHIFT; o->failcnt = atomic_long_read(&memcg->oom_kill_cnt); lim = memcg->oom_guarantee; - lim = lim == RESOURCE_MAX ? UB_MAXVALUE : + lim = lim >= RESOURCE_MAX ? UB_MAXVALUE : min_t(unsigned long long, lim >> PAGE_SHIFT, UB_MAXVALUE); o->barrier = o->limit = lim; } @@ -5486,7 +5486,7 @@ int mem_cgroup_apply_beancounter(struct mem_cgroup *memcg, if (mem != mem_old) { /* first, reset memsw limit since it cannot be < mem limit */ - if (memsw_old != RESOURCE_MAX) { + if (memsw_old < RESOURCE_MAX) { memsw_old = RESOURCE_MAX; ret = mem_cgroup_resize_memsw_limit(memcg, memsw_old); if (ret) _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel