diff options
author | KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> | 2008-07-25 04:47:19 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-07-25 13:53:37 -0400 |
commit | 12b9804419cfb1c1bdac413f6c373af3b88d154b (patch) | |
tree | eff535da51774e53395a9fec0418bc5332009d3e | |
parent | cede86acd8bd5d2205dec28db8ac86410a3a19e8 (diff) |
res_counter: limit change support ebusy
Add an interface to set limit. This is necessary to memory resource
controller because it shrinks usage at set limit.
Other controllers may not need this interface to shrink usage because
shrinking is not necessary or impossible.
Acked-by: Balbir Singh <balbir@linux.vnet.ibm.com>
Acked-by: Pavel Emelyanov <xemul@openvz.org>
Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Paul Menage <menage@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | include/linux/res_counter.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/include/linux/res_counter.h b/include/linux/res_counter.h index 290205dfe094..fdeadd9740dc 100644 --- a/include/linux/res_counter.h +++ b/include/linux/res_counter.h | |||
@@ -158,4 +158,20 @@ static inline void res_counter_reset_failcnt(struct res_counter *cnt) | |||
158 | cnt->failcnt = 0; | 158 | cnt->failcnt = 0; |
159 | spin_unlock_irqrestore(&cnt->lock, flags); | 159 | spin_unlock_irqrestore(&cnt->lock, flags); |
160 | } | 160 | } |
161 | |||
162 | static inline int res_counter_set_limit(struct res_counter *cnt, | ||
163 | unsigned long long limit) | ||
164 | { | ||
165 | unsigned long flags; | ||
166 | int ret = -EBUSY; | ||
167 | |||
168 | spin_lock_irqsave(&cnt->lock, flags); | ||
169 | if (cnt->usage < limit) { | ||
170 | cnt->limit = limit; | ||
171 | ret = 0; | ||
172 | } | ||
173 | spin_unlock_irqrestore(&cnt->lock, flags); | ||
174 | return ret; | ||
175 | } | ||
176 | |||
161 | #endif | 177 | #endif |