• Michal Hocko's avatar
    mm, oom: hide mm which is shared with kthread or global init · a373966d
    Michal Hocko authored
    The only case where the oom_reaper is not triggered for the oom victim
    is when it shares the memory with a kernel thread (aka use_mm) or with
    the global init.  After "mm, oom: skip vforked tasks from being
    selected" the victim cannot be a vforked task of the global init so we
    are left with clone(CLONE_VM) (without CLONE_SIGHAND).  use_mm() users
    are quite rare as well.
    
    In order to help forward progress for the OOM killer, make sure that
    this really rare case will not get in the way - we do this by hiding the
    mm from the oom killer by setting MMF_OOM_REAPED flag for it.
    oom_scan_process_thread will ignore any TIF_MEMDIE task if it has
    MMF_OOM_REAPED flag set to catch these oom victims.
    
    After this patch we should guarantee forward progress for the OOM killer
    even when the selected victim is sharing memory with a kernel thread or
    global init as long as the victims mm is still alive.
    
    Link: http://lkml.kernel.org/r/1466426628-15074-11-git-send-email-mhocko@kernel.orgSigned-off-by: default avatarMichal Hocko <mhocko@suse.com>
    Acked-by: default avatarOleg Nesterov <oleg@redhat.com>
    Cc: Vladimir Davydov <vdavydov@virtuozzo.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    a373966d
oom_kill.c 29.3 KB