• Johannes Weiner's avatar
    mm: oom_kill: generalize OOM progress waitqueue · c38f1025
    Johannes Weiner authored
    It turns out that the mechanism to wait for exiting OOM victims is less
    generic than it looks: it won't issue wakeups unless the OOM killer is
    disabled.
    
    The reason this check was added was the thought that, since only the OOM
    disabling code would wait on this queue, wakeup operations could be
    saved when that specific consumer is known to be absent.
    
    However, this is quite the handgrenade.  Later attempts to reuse the
    waitqueue for other purposes will lead to completely unexpected bugs and
    the failure mode will appear seemingly illogical.  Generally, providers
    shouldn't make unnecessary assumptions about consumers.
    
    This could have been replaced with waitqueue_active(), but it only saves
    a few instructions in one of the coldest paths in the kernel.  Simply
    remove it.
    Signed-off-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Acked-by: default avatarMichal Hocko <mhocko@suse.cz>
    Acked-by: default avatarDavid Rientjes <rientjes@google.com>
    Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: Dave Chinner <david@fromorbit.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    c38f1025
oom_kill.c 22.9 KB