• Vlastimil Babka's avatar
    mm, vmscan: make compaction_ready() more accurate and readable · fdd4c614
    Vlastimil Babka authored
    The compaction_ready() is used during direct reclaim for costly order
    allocations to skip reclaim for zones where compaction should be
    attempted instead.  It's combining the standard compaction_suitable()
    check with its own watermark check based on high watermark with extra
    gap, and the result is confusing at best.
    
    This patch attempts to better structure and document the checks
    involved.  First, compaction_suitable() can determine that the
    allocation should either succeed already, or that compaction doesn't
    have enough free pages to proceed.  The third possibility is that
    compaction has enough free pages, but we still decide to reclaim first -
    unless we are already above the high watermark with gap.  This does not
    mean that the reclaim will actually reach this watermark during single
    attempt, this is rather an over-reclaim protection.  So document the
    code as such.  The check for compaction_deferred() is removed
    completely, as it in fact had no proper role here.
    
    The result after this patch is mainly a less confusing code.  We also
    skip some over-reclaim in cases where the allocation should already
    succed.
    
    Link: http://lkml.kernel.org/r/20160810091226.6709-12-vbabka@suse.czSigned-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Tested-by: default avatarLorenzo Stoakes <lstoakes@gmail.com>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Cc: Mel Gorman <mgorman@techsingularity.net>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Rik van Riel <riel@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    fdd4c614
vmscan.c 111 KB