summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Weiner <hannes@cmpxchg.org>2011-03-23 16:42:20 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2011-03-23 19:46:23 -0700
commitb7c6167848fa36e32f1874b95c1edc02881cd040 (patch)
treed160acb871f2be4e0e7095c662b647e12a199dac
parent56039efa18f2530fc23e8ef19e716b65ee2a1d1e (diff)
memcg: soft limit reclaim should end at limit not below
Soft limit reclaim continues until the usage is below the current soft limit, but the documented semantics are actually that soft limit reclaim will push usage back until the soft limits are met again. Signed-off-by: Johannes Weiner <hannes@cmpxchg.org> Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp> Acked-by: Balbir Singh <balbir@linux.vnet.ibm.com> Cc: Minchan Kim <minchan.kim@gmail.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.h4
-rw-r--r--mm/memcontrol.c2
2 files changed, 3 insertions, 3 deletions
diff --git a/include/linux/res_counter.h b/include/linux/res_counter.h
index a5930cb6614..bf1f01bc013 100644
--- a/include/linux/res_counter.h
+++ b/include/linux/res_counter.h
@@ -139,7 +139,7 @@ static inline bool res_counter_limit_check_locked(struct res_counter *cnt)
static inline bool res_counter_soft_limit_check_locked(struct res_counter *cnt)
{
- if (cnt->usage < cnt->soft_limit)
+ if (cnt->usage <= cnt->soft_limit)
return true;
return false;
@@ -202,7 +202,7 @@ static inline bool res_counter_check_margin(struct res_counter *cnt,
return ret;
}
-static inline bool res_counter_check_under_soft_limit(struct res_counter *cnt)
+static inline bool res_counter_check_within_soft_limit(struct res_counter *cnt)
{
bool ret;
unsigned long flags;
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index b56bd74b486..13de53fe010 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -1477,7 +1477,7 @@ static int mem_cgroup_hierarchical_reclaim(struct mem_cgroup *root_mem,
return ret;
total += ret;
if (check_soft) {
- if (res_counter_check_under_soft_limit(&root_mem->res))
+ if (res_counter_check_within_soft_limit(&root_mem->res))
return total;
} else if (mem_cgroup_check_under_limit(root_mem))
return 1 + total;