diff options
author | Johannes Weiner <hannes@cmpxchg.org> | 2014-08-06 19:05:51 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-08-06 21:01:17 -0400 |
commit | 9b1306192d335759a6cf2f3b404c49e811e5f953 (patch) | |
tree | b1022d96acd94bb244449593a355b3dd7138ab71 /mm/memcontrol.c | |
parent | d51d885bbb137cc8e1704e76be1846c5e0d5e8b4 (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.c | 8 |
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)); |
2654 | nomem: | 2654 | nomem: |
2655 | if (!(gfp_mask & __GFP_NOFAIL)) | 2655 | if (!(gfp_mask & __GFP_NOFAIL)) |