diff options
author | Glauber Costa <glommer@parallels.com> | 2012-01-19 23:57:15 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-01-22 15:08:45 -0500 |
commit | 8cfd14ad1eb52e44cb1fe7b47a68126e45e04026 (patch) | |
tree | 5c526f7ced428e65db025ba7af29ca114031c302 /include | |
parent | 376be5ff8a6a36efadd131860cf26841f366d44c (diff) |
cgroup: make sure memcg margin is 0 when over limit
For the memcg sock code, we'll need to register allocations
that are temporarily over limit. Let's make sure that margin
is 0 in this case.
I am keeping this as a separate patch, so that if any weirdness
interaction appears in the future, we can now exactly what caused
it.
Suggested by Johannes Weiner
Signed-off-by: Glauber Costa <glommer@parallels.com>
CC: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
CC: Johannes Weiner <hannes@cmpxchg.org>
CC: Michal Hocko <mhocko@suse.cz>
CC: Tejun Heo <tj@kernel.org>
CC: Li Zefan <lizf@cn.fujitsu.com>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/res_counter.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/include/linux/res_counter.h b/include/linux/res_counter.h index c9d625ca659e..d06d014afda6 100644 --- a/include/linux/res_counter.h +++ b/include/linux/res_counter.h | |||
@@ -142,7 +142,10 @@ static inline unsigned long long res_counter_margin(struct res_counter *cnt) | |||
142 | unsigned long flags; | 142 | unsigned long flags; |
143 | 143 | ||
144 | spin_lock_irqsave(&cnt->lock, flags); | 144 | spin_lock_irqsave(&cnt->lock, flags); |
145 | margin = cnt->limit - cnt->usage; | 145 | if (cnt->limit > cnt->usage) |
146 | margin = cnt->limit - cnt->usage; | ||
147 | else | ||
148 | margin = 0; | ||
146 | spin_unlock_irqrestore(&cnt->lock, flags); | 149 | spin_unlock_irqrestore(&cnt->lock, flags); |
147 | return margin; | 150 | return margin; |
148 | } | 151 | } |