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, 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 @@ static int mem_cgroup_try_charge(struct mem_cgroup *memcg, 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 @@ static int mem_cgroup_try_charge(struct mem_cgroup *memcg, 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))