From: Li RongQing <[email protected]> commit cbedbac3e66121ddbac363776c23119f8eaeefda upstream.
mem_cgroup_margin() might return (memory.limit - memory_count) when the memsw.limit is in excess. This doesn't happen usually because we do not allow excess on hard limits and (memory.limit <= memsw.limit), but __GFP_NOFAIL charges can force the charge and cause the excess when no memory is really swappable (swap is full or no anonymous memory is left). [[email protected]: rewrote changelog] Link: http://lkml.kernel.org/r/[email protected] Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Li RongQing <[email protected]> Acked-by: Vladimir Davydov <[email protected]> Acked-by: Michal Hocko <[email protected]> Cc: Johannes Weiner <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]> https://jira.sw.ru/browse/PSBM-67076 Signed-off-by: Andrey Ryabinin <[email protected]> --- mm/memcontrol.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 66d51b7b07c5..b1bc0924f6d5 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1761,6 +1761,8 @@ static unsigned long mem_cgroup_margin(struct mem_cgroup *memcg) limit = ACCESS_ONCE(memcg->memsw.limit); if (count <= limit) margin = min(margin, limit - count); + else + margin = 0; } return margin; -- 2.13.0 _______________________________________________ Devel mailing list [email protected] https://lists.openvz.org/mailman/listinfo/devel
