Skip to content
  • Michal Hocko's avatar
    mm/page_alloc.c: do not loop over ALLOC_NO_WATERMARKS without triggering reclaim · 33d53103
    Michal Hocko authored
    
    
    __alloc_pages_slowpath is looping over ALLOC_NO_WATERMARKS requests if
    __GFP_NOFAIL is requested.  This is fragile because we are basically
    relying on somebody else to make the reclaim (be it the direct reclaim
    or OOM killer) for us.  The caller might be holding resources (e.g.
    locks) which block other other reclaimers from making any progress for
    example.  Remove the retry loop and rely on __alloc_pages_slowpath to
    invoke all allowed reclaim steps and retry logic.
    
    We have to be careful about __GFP_NOFAIL allocations from the
    PF_MEMALLOC context even though this is a very bad idea to begin with
    because no progress can be gurateed at all.  We shouldn't break the
    __GFP_NOFAIL semantic here though.  It could be argued that this is
    essentially GFP_NOWAIT context which we do not support but PF_MEMALLOC
    is much harder to check for existing users because they might happen
    deep down the code path performed much later after setting the flag so
    we cannot really rule out there is no kernel path triggering this
    combination.
    
    Signed-off-by: default avatarMichal Hocko <mhocko@suse.com>
    Acked-by: default avatarMel Gorman <mgorman@suse.de>
    Acked-by: default avatarDavid Rientjes <rientjes@google.com>
    Cc: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
    Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    33d53103