• Christoph Lameter's avatar
    [PATCH] page migration: Fix fallback behavior for dirty pages · 4c28f811
    Christoph Lameter authored
    Currently we check PageDirty() in order to make the decision to swap out
    the page.  However, the dirty information may be only be contained in the
    ptes pointing to the page.  We need to first unmap the ptes before checking
    for PageDirty().  If unmap is successful then the page count of the page
    will also be decreased so that pageout() works properly.
    
    This is a fix necessary for 2.6.17.  Without this fix we may migrate dirty
    pages for filesystems without migration functions.  Filesystems may keep
    pointers to dirty pages.  Migration of dirty pages can result in the
    filesystem keeping pointers to freed pages.
    
    Unmapping is currently not be separated out from removing all the
    references to a page and moving the mapping.  Therefore try_to_unmap will
    be called again in migrate_page() if the writeout is successful.  However,
    it wont do anything since the ptes are already removed.
    
    The coming updates to the page migration code will restructure the code
    so that this is no longer necessary.
    Signed-off-by: default avatarChristoph Lameter <clameter@sgi.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    4c28f811
migrate.c 14.9 KB