aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Weiner <hannes@cmpxchg.org>2014-08-06 16:05:51 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2014-08-06 18:01:17 -0700
commit9b1306192d335759a6cf2f3b404c49e811e5f953 (patch)
treeb1022d96acd94bb244449593a355b3dd7138ab71
parentd51d885bbb137cc8e1704e76be1846c5e0d5e8b4 (diff)
downloadlinux-9b1306192d335759a6cf2f3b404c49e811e5f953.tar.gz
mm: memcontrol: retry reclaim for oom-disabled and __GFP_NOFAIL charges
There is no reason why oom-disabled and __GFP_NOFAIL charges should try to reclaim only once when every other charge tries several times before giving up. Make them all retry the same number of times. Signed-off-by: Johannes Weiner <hannes@cmpxchg.org> Acked-by: Michal Hocko <mhocko@suse.cz> Cc: Hugh Dickins <hughd@google.com> Cc: Tejun Heo <tj@kernel.org> Cc: Vladimir Davydov <vdavydov@parallels.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--mm/memcontrol.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index a73f3947f5d92c..3069d6420b0edb 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -2566,7 +2566,7 @@ static int mem_cgroup_try_charge(struct mem_cgroup *memcg,
bool oom)
{
unsigned int batch = max(CHARGE_BATCH, nr_pages);
- int nr_oom_retries = MEM_CGROUP_RECLAIM_RETRIES;
+ int nr_retries = MEM_CGROUP_RECLAIM_RETRIES;
struct mem_cgroup *mem_over_limit;
struct res_counter *fail_res;
unsigned long nr_reclaimed;
@@ -2638,6 +2638,9 @@ retry:
if (mem_cgroup_wait_acct_move(mem_over_limit))
goto retry;
+ if (nr_retries--)
+ goto retry;
+
if (gfp_mask & __GFP_NOFAIL)
goto bypass;
@@ -2647,9 +2650,6 @@ retry:
if (!oom)
goto nomem;
- if (nr_oom_retries--)
- goto retry;
-
mem_cgroup_oom(mem_over_limit, gfp_mask, get_order(batch));
nomem:
if (!(gfp_mask & __GFP_NOFAIL))