--- a/mm/pagewalk.c +++ b/mm/pagewalk.c @@ -490,6 +490,7 @@ int walk_page_range(struct mm_struct *mm, unsigned long start, vma = find_vma(walk.mm, start); do { + process_vma_walk_lock(vma, ops->walk_lock); if (!vma) { /* after the last vma */ walk.vma = NULL; next = end; @@ -501,7 +502,6 @@ int walk_page_range(struct mm_struct *mm, unsigned long start, if (ops->pte_hole) err = ops->pte_hole(start, next, -1, &walk); } else { /* inside vma */ - process_vma_walk_lock(vma, ops->walk_lock); walk.vma = vma; next = min(end, vma->vm_end); vma = find_vma(mm, vma->vm_end);