mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-28 05:12:49 +00:00
mm/memcontrol.c: fix the margin computation in mem_cgroup_margin()
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). [mhocko@suse.com: rewrote changelog] Link: http://lkml.kernel.org/r/20160525155122.GK20132@dhcp22.suse.cz Link: http://lkml.kernel.org/r/1464068266-27736-1-git-send-email-roy.qing.li@gmail.com Signed-off-by: Li RongQing <roy.qing.li@gmail.com> Acked-by: Vladimir Davydov <vdavydov@virtuozzo.com> Acked-by: Michal Hocko <mhocko@suse.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
badbda53e5
commit
cbedbac3e6
1 changed files with 2 additions and 0 deletions
|
@ -1108,6 +1108,8 @@ static unsigned long mem_cgroup_margin(struct mem_cgroup *memcg)
|
||||||
limit = READ_ONCE(memcg->memsw.limit);
|
limit = READ_ONCE(memcg->memsw.limit);
|
||||||
if (count <= limit)
|
if (count <= limit)
|
||||||
margin = min(margin, limit - count);
|
margin = min(margin, limit - count);
|
||||||
|
else
|
||||||
|
margin = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return margin;
|
return margin;
|
||||||
|
|
Loading…
Reference in a new issue