• Mel Gorman's avatar
    page-allocator: always change pageblock ownership when anti-fragmentation is disabled · dd5d241e
    Mel Gorman authored
    On low-memory systems, anti-fragmentation gets disabled as fragmentation
    cannot be avoided on a sufficiently large boundary to be worthwhile.  Once
    disabled, there is a period of time when all the pageblocks are marked
    MOVABLE and the expectation is that they get marked UNMOVABLE at each call
    to __rmqueue_fallback().
    
    However, when MAX_ORDER is large the pageblocks do not change ownership
    because the normal criteria are not met.  This has the effect of
    prematurely breaking up too many large contiguous blocks.  This is most
    serious on NOMMU systems which depend on high-order allocations to boot.
    This patch causes pageblocks to change ownership on every fallback when
    anti-fragmentation is disabled.  This prevents the large blocks being
    prematurely broken up.
    
    This is a fix to commit 49255c61 [page
    allocator: move check for disabled anti-fragmentation out of fastpath] and
    the problem affects 2.6.31-rc8.
    Signed-off-by: default avatarMel Gorman <mel@csn.ul.ie>
    Tested-by: default avatarPaul Mundt <lethal@linux-sh.org>
    Cc: David Howells <dhowells@redhat.com>
    Cc: Pekka Enberg <penberg@cs.helsinki.fi>
    Acked-by: default avatarGreg Ungerer <gerg@snapgear.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    dd5d241e
page_alloc.c 135 KB