Skip to content
  • Michal Hocko's avatar
    mm: help __GFP_NOFAIL allocations which do not trigger OOM killer · 6c18ba7a
    Michal Hocko authored
    Now that __GFP_NOFAIL doesn't override decisions to skip the oom killer
    we are left with requests which require to loop inside the allocator
    without invoking the oom killer (e.g.  GFP_NOFS|__GFP_NOFAIL used by fs
    code) and so they might, in very unlikely situations, loop for ever -
    e.g.  other parallel request could starve them.
    
    This patch tries to limit the likelihood of such a lockup by giving
    these __GFP_NOFAIL requests a chance to move on by consuming a small
    part of memory reserves.  We are using ALLOC_HARDER which should be
    enough to prevent from the starvation by regular allocation requests,
    yet it shouldn't consume enough from the reserves to disrupt high
    priority requests (ALLOC_HIGH).
    
    While we are at it, let's introduce a helper __alloc_pages_cpuset_fallback
    which enforces the cpusets but allows to fallback to ignore them if the
    first attempt fails.  __GFP_NOFAIL requests can be considered important
    enough to allow cpuset runaway in order for the system to move on.  It
    is highly unlikely that any of these will be GFP_USER anyway.
    
    Link: http://lkml.kernel.org/r/20161220134904.21023-4-mhocko@kernel.org
    
    
    Signed-off-by: default avatarMichal Hocko <mhocko@suse.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Hillf Danton <hillf.zj@alibaba-inc.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>
    6c18ba7a