aboutsummaryrefslogtreecommitdiffstats
path: root/mm/memcontrol.c
diff options
context:
space:
mode:
authorJohannes Weiner <hannes@cmpxchg.org>2014-08-06 19:05:51 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-08-06 21:01:17 -0400
commit9b1306192d335759a6cf2f3b404c49e811e5f953 (patch)
treeb1022d96acd94bb244449593a355b3dd7138ab71 /mm/memcontrol.c
parentd51d885bbb137cc8e1704e76be1846c5e0d5e8b4 (diff)
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>
Diffstat (limited to 'mm/memcontrol.c')
-rw-r--r--mm/memcontrol.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index a73f3947f5d9..3069d6420b0e 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -2566,7 +2566,7 @@ static int mem_cgroup_try_charge(struct mem_cgroup *memcg,
2566 bool oom) 2566 bool oom)
2567{ 2567{
2568 unsigned int batch = max(CHARGE_BATCH, nr_pages); 2568 unsigned int batch = max(CHARGE_BATCH, nr_pages);
2569 int nr_oom_retries = MEM_CGROUP_RECLAIM_RETRIES; 2569 int nr_retries = MEM_CGROUP_RECLAIM_RETRIES;
2570 struct mem_cgroup *mem_over_limit; 2570 struct mem_cgroup *mem_over_limit;
2571 struct res_counter *fail_res; 2571 struct res_counter *fail_res;
2572 unsigned long nr_reclaimed; 2572 unsigned long nr_reclaimed;
@@ -2638,6 +2638,9 @@ retry:
2638 if (mem_cgroup_wait_acct_move(mem_over_limit)) 2638 if (mem_cgroup_wait_acct_move(mem_over_limit))
2639 goto retry; 2639 goto retry;
2640 2640
2641 if (nr_retries--)
2642 goto retry;
2643
2641 if (gfp_mask & __GFP_NOFAIL) 2644 if (gfp_mask & __GFP_NOFAIL)
2642 goto bypass; 2645 goto bypass;
2643 2646
@@ -2647,9 +2650,6 @@ retry:
2647 if (!oom) 2650 if (!oom)
2648 goto nomem; 2651 goto nomem;
2649 2652
2650 if (nr_oom_retries--)
2651 goto retry;
2652
2653 mem_cgroup_oom(mem_over_limit, gfp_mask, get_order(batch)); 2653 mem_cgroup_oom(mem_over_limit, gfp_mask, get_order(batch));
2654nomem: 2654nomem:
2655 if (!(gfp_mask & __GFP_NOFAIL)) 2655 if (!(gfp_mask & __GFP_NOFAIL))