• Tetsuo Handa's avatar
    android,lowmemorykiller: Don't abuse TIF_MEMDIE. · 77ed2c57
    Tetsuo Handa authored
    Currently, lowmemorykiller (LMK) is using TIF_MEMDIE for two purposes.
    One is to remember processes killed by LMK, and the other is to
    accelerate termination of processes killed by LMK.
    
    But since LMK is invoked as a memory shrinker function, there still
    should be some memory available. It is very likely that memory
    allocations by processes killed by LMK will succeed without using
    ALLOC_NO_WATERMARKS via TIF_MEMDIE. Even if their allocations cannot
    escape from memory allocation loop unless they use ALLOC_NO_WATERMARKS,
    lowmem_deathpending_timeout can guarantee forward progress by choosing
    next victim process.
    
    On the other hand, mark_oom_victim() assumes that it must be called with
    oom_lock held and it must not be called after oom_killer_disable() was
    called. But LMK is calling it without holding oom_lock and checking
    oom_killer_disabled. It is possible that LMK calls mark_oom_victim()
    due to allocation requests by kernel threads after current thread
    returned from oom_killer_disabled(). This will break synchronization
    for PM/suspend.
    
    This patch introduces per a task_struct flag for remembering processes
    killed by LMK, and replaces TIF_MEMDIE with that flag. By applying this
    patch, assumption by mark_oom_victim() becomes true.
    Signed-off-by: default avatarTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Cc: Arve Hjonnevag <arve@android.com>
    Cc: Riley Andrews <riandrews@android.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    77ed2c57
lowmemorykiller.c 6.22 KB