• Li Xinhai's avatar
    mm/mempolicy.c: check range first in queue_pages_test_walk · a18b3ac2
    Li Xinhai authored
    Patch series "mm: Fix checking unmapped holes for mbind", v4.
    
    This patchset fix checking unmapped holes for mbind().
    
    First patch makes sure the vma been correctly tracked in .test_walk(),
    so each time when .test_walk() is called, the neighborhood of two vma
    is correct.
    
    Current problem is that the !vma_migratable() check could cause return
    immediately without update tracking to vma.
    
    Second patch fix the inconsistent report of EFAULT when mbind() is
    called for MPOL_DEFAULT and non MPOL_DEFAULT cases, so application do
    not need to have workaround code to handle this special behavior.
    Currently there are two problems, one is that the .test_walk() can not
    know there is hole at tail side of range, because .test_walk() only
    call for vma not for hole.  The other one is that mbind_range() checks
    for hole at head side of range but do not consider the
    MPOL_MF_DISCONTIG_OK flag as done in .test_walk().
    
    This patch (of 2):
    
    Checking unmapped hole and updating the previous vma must be handled
    first, otherwise the unmapped hole could be calculated from a wrong
    previous vma.
    
    Several commits were relevant to this error:
    
     - commit 6f4576e3 ("mempolicy: apply page table walker on
       queue_pages_range()")
    
       This commit was correct, the VM_PFNMAP check was after updating
       previous vma
    
     - commit 48684a65 ("mm: pagewalk: fix misbehavior of
       walk_page_range for vma(VM_PFNMAP)")
    
       This commit added VM_PFNMAP check before updating previous vma. Then,
       there were two VM_PFNMAP check did same thing twice.
    
     - commit acda0c33 ("mm/mempolicy.c: get rid of duplicated check for
       vma(VM_PFNMAP) in queue_page s_range()")
    
       This commit tried to fix the duplicated VM_PFNMAP check, but it
       wrongly removed the one which was after updating vma.
    
    Link: http://lkml.kernel.org/r/1573218104-11021-2-git-send-email-lixinhai.lxh@gmail.com
    Fixes: acda0c33 (mm/mempolicy.c: get rid of duplicated check for vma(VM_PFNMAP) in queue_pages_range())
    Signed-off-by: default avatarLi Xinhai <lixinhai.lxh@gmail.com>
    Reviewed-by: default avatarNaoya Horiguchi <n-horiguchi@ah.jp.nec.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: linux-man <linux-man@vger.kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    a18b3ac2
mempolicy.c 74.4 KB