• Christoph Lameter's avatar
    [PATCH] page migration: Fix MPOL_INTERLEAVE behavior for migration via mbind() · 1e275d40
    Christoph Lameter authored
    migrate_pages_to() allocates a list of new pages on the intended target
    node or with the intended policy and then uses the list of new pages as
    targets for the migration of a list of pages out of place.
    
    When the pages are allocated it is not clear which of the out of place
    pages will be moved to the new pages.  So we cannot specify an address as
    needed by alloc_page_vma().  This causes problem for MPOL_INTERLEAVE which
    will currently allocate the pages on the first node of the set.  If mbind
    is used with vma that has the policy of MPOL_INTERLEAVE then the
    interleaving of pages may be destroyed.
    
    This patch fixes that by generating a fake address for each alloc_page_vma
    which will result is a distribution of pages as prescribed by
    MPOL_INTERLEAVE.
    
    Lee also noted that the sequence of nodes for the new pages seems to be
    inverted.  So we also invert the way the lists of pages for migration are
    build.
    Signed-off-by: default avatarChristoph Lameter <clameter@sgi.com>
    Signed-off-by: default avatarLee Schermerhorn <lee.schermerhorn@hp.com>
    Looks-ok-to: Andi Kleen <ak@suse.de>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    1e275d40
mempolicy.c 44.9 KB