Skip to content

Commit

Permalink
oom, oom_reaper: do not enqueue task if it is on the oom_reaper_list …
Browse files Browse the repository at this point in the history
…head

Commit bb29902 ("oom, oom_reaper: protect oom_reaper_list using
simpler way") has simplified the check for tasks already enqueued for
the oom reaper by checking tsk->oom_reaper_list != NULL.  This check is
not sufficient because the tsk might be the head of the queue without
any other tasks queued and then we would simply lockup looping on the
same task.  Fix the condition by checking for the head as well.

Fixes: bb29902 ("oom, oom_reaper: protect oom_reaper_list using simpler way")
Signed-off-by: Michal Hocko <mhocko@suse.com>
Acked-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Michal Hocko authored and Linus Torvalds committed Apr 1, 2016
1 parent bbe3de2 commit af8e15c
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion mm/oom_kill.c
Original file line number Diff line number Diff line change
Expand Up @@ -547,7 +547,11 @@ static int oom_reaper(void *unused)

static void wake_oom_reaper(struct task_struct *tsk)
{
if (!oom_reaper_th || tsk->oom_reaper_list)
if (!oom_reaper_th)
return;

/* tsk is already queued? */
if (tsk == oom_reaper_list || tsk->oom_reaper_list)
return;

get_task_struct(tsk);
Expand Down

0 comments on commit af8e15c

Please sign in to comment.