• Michal Hocko's avatar
    mm, oom_reaper: hide oom reaped tasks from OOM killer more carefully · bb8a4b7f
    Michal Hocko authored
    Commit 36324a99 ("oom: clear TIF_MEMDIE after oom_reaper managed to
    unmap the address space") not only clears TIF_MEMDIE for oom reaped task
    but also set OOM_SCORE_ADJ_MIN for the target task to hide it from the
    oom killer.  This works in simple cases but it is not sufficient for
    (unlikely) cases where the mm is shared between independent processes
    (as they do not share signal struct).  If the mm had only small amount
    of memory which could be reaped then another task sharing the mm could
    be selected and that wouldn't help to move out from the oom situation.
    
    Introduce MMF_OOM_REAPED mm flag which is checked in oom_badness (same
    as OOM_SCORE_ADJ_MIN) and task is skipped if the flag is set.  Set the
    flag after __oom_reap_task is done with a task.  This will force the
    select_bad_process() to ignore all already oom reaped tasks as well as
    no such task is sacrificed for its parent.
    Signed-off-by: default avatarMichal Hocko <mhocko@suse.com>
    Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Cc: David Rientjes <rientjes@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    bb8a4b7f
oom_kill.c 26.8 KB