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>
This commit is contained in:
parent
d51d885bbb
commit
9b1306192d
@ -2566,7 +2566,7 @@ static int mem_cgroup_try_charge(struct mem_cgroup *memcg,
|
|||||||
bool oom)
|
bool oom)
|
||||||
{
|
{
|
||||||
unsigned int batch = max(CHARGE_BATCH, nr_pages);
|
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 mem_cgroup *mem_over_limit;
|
||||||
struct res_counter *fail_res;
|
struct res_counter *fail_res;
|
||||||
unsigned long nr_reclaimed;
|
unsigned long nr_reclaimed;
|
||||||
@ -2638,6 +2638,9 @@ retry:
|
|||||||
if (mem_cgroup_wait_acct_move(mem_over_limit))
|
if (mem_cgroup_wait_acct_move(mem_over_limit))
|
||||||
goto retry;
|
goto retry;
|
||||||
|
|
||||||
|
if (nr_retries--)
|
||||||
|
goto retry;
|
||||||
|
|
||||||
if (gfp_mask & __GFP_NOFAIL)
|
if (gfp_mask & __GFP_NOFAIL)
|
||||||
goto bypass;
|
goto bypass;
|
||||||
|
|
||||||
@ -2647,9 +2650,6 @@ retry:
|
|||||||
if (!oom)
|
if (!oom)
|
||||||
goto nomem;
|
goto nomem;
|
||||||
|
|
||||||
if (nr_oom_retries--)
|
|
||||||
goto retry;
|
|
||||||
|
|
||||||
mem_cgroup_oom(mem_over_limit, gfp_mask, get_order(batch));
|
mem_cgroup_oom(mem_over_limit, gfp_mask, get_order(batch));
|
||||||
nomem:
|
nomem:
|
||||||
if (!(gfp_mask & __GFP_NOFAIL))
|
if (!(gfp_mask & __GFP_NOFAIL))
|
||||||
|
Loading…
Reference in New Issue
Block a user