• Andrew Morton's avatar
    [PATCH] implement __GFP_REPEAT, __GFP_NOFAIL, __GFP_NORETRY · 75908778
    Andrew Morton authored
    This is a cleanup patch.
    
    There are quite a lot of places in the kernel which will infinitely retry a
    memory allocation.
    
    Generally, they get it wrong.  Some do yield(), the semantics of which have
    changed over time.  Some do schedule(), which can lock up if the caller is
    SCHED_FIFO/RR.  Some do schedule_timeout(), etc.
    
    And often it is unnecessary, because the page allocator will do the retry
    internally anyway.  But we cannot rely on that - this behaviour may change
    (-aa and -rmap kernels do not do this, for instance).
    
    So it is good to formalise and to centralise this operation.  If an
    allocation specifies __GFP_REPEAT then the page allocator must infinitely
    retry the allocation.
    
    The semantics of __GFP_REPEAT are "try harder".  The allocation _may_ fail
    (the 2.4 -aa and -rmap VM's do not retry infinitely by default).
    
    The semantics of __GFP_NOFAIL are "cannot fail".  It is a no-op in this VM,
    but needs to be honoured (or fix up the callers) if the VM ischanged to not
    retry infinitely by default.
    
    The semantics of __GFP_NOREPEAT are "try once, don't loop".  This isn't used
    at present (although perhaps it should be, in swapoff).  It is mainly for
    completeness.
    75908778
page_alloc.c 37.8 KB