• Nick Piggin's avatar
    [PATCH] fix get_user_pages bug · f33ea7f4
    Nick Piggin authored
    Checking pte_dirty instead of pte_write in __follow_page is problematic
    for s390, and for copy_one_pte which leaves dirty when clearing write.
    
    So revert __follow_page to check pte_write as before, and make
    do_wp_page pass back a special extra VM_FAULT_WRITE bit to say it has
    done its full job: once get_user_pages receives this value, it no longer
    requires pte_write in __follow_page.
    
    But most callers of handle_mm_fault, in the various architectures, have
    switch statements which do not expect this new case.  To avoid changing
    them all in a hurry, make an inline wrapper function (using the old
    name) that masks off the new bit, and use the extended interface with
    double underscores.
    
    Yes, we do have a call to do_wp_page from do_swap_page, but no need to
    change that: in rare case it's needed, another do_wp_page will follow.
    Signed-off-by: default avatarHugh Dickins <hugh@veritas.com>
    [ Cleanups by Nick Piggin ]
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    f33ea7f4
memory.c 59 KB