mm,oom_reaper: don't call mmput_async() without atomic_inc_not_zero()
authorTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Fri, 24 Jun 2016 21:48:35 +0000 (14:48 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 25 Jun 2016 00:23:52 +0000 (17:23 -0700)
Commit e2fe14564d33 ("oom_reaper: close race with exiting task") reduced
frequency of needlessly selecting next OOM victim, but was calling
mmput_async() when atomic_inc_not_zero() failed.

Link: http://lkml.kernel.org/r/1464423365-5555-1-git-send-email-penguin-kernel@I-love.SAKURA.ne.jp
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Acked-by: Michal Hocko <mhocko@suse.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/oom_kill.c

index acbc432..be67df3 100644 (file)
@@ -478,6 +478,7 @@ static bool __oom_reap_task(struct task_struct *tsk)
        mm = p->mm;
        if (!atomic_inc_not_zero(&mm->mm_users)) {
                task_unlock(p);
+               mm = NULL;
                goto unlock_oom;
        }