Since commit 29ef680ae7c2 ("memcg, oom: move out_of_memory back to the charge path"), only oom_kill_disable is set, oom killer will be delayed to page fault path. In the charge patch, even if the oom_lock in memcg can't be acquired, the oom handing can also be invoked. In order to keep the behavior consistent with it, remove the lock check, just leave oom_kill_disable check behind in the page fault path. Furthermore, the lock contender won't be scheduled out, this doesn't fit the sixth description in commit fb2a6fc56be66 ("mm: memcg: rework and document OOM waiting and wakeup"). So remove the explicit wakeup for the lock holder. Fixes: fb2a6fc56be6 ("mm: memcg: rework and document OOM waiting and wakeup") Signed-off-by: Haifeng Xu <haifeng.xu@xxxxxxxxxx> --- mm/memcontrol.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 5abffe6f8389..360fa7cf7879 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1999,7 +1999,7 @@ bool mem_cgroup_oom_synchronize(bool handle) if (locked) mem_cgroup_oom_notify(memcg); - if (locked && !memcg->oom_kill_disable) { + if (!memcg->oom_kill_disable) { mem_cgroup_unmark_under_oom(memcg); finish_wait(&memcg_oom_waitq, &owait.wait); mem_cgroup_out_of_memory(memcg, current->memcg_oom_gfp_mask, @@ -2010,15 +2010,8 @@ bool mem_cgroup_oom_synchronize(bool handle) finish_wait(&memcg_oom_waitq, &owait.wait); } - if (locked) { + if (locked) mem_cgroup_oom_unlock(memcg); - /* - * There is no guarantee that an OOM-lock contender - * sees the wakeups triggered by the OOM kill - * uncharges. Wake any sleepers explicitly. - */ - memcg_oom_recover(memcg); - } cleanup: current->memcg_in_oom = NULL; css_put(&memcg->css); -- 2.25.1