rmap: fix walk during fork

The below bug in fork led to the rmap walk finding the parent huge-pmd
twice instead of just once, because the anon_vma_chain objects of the
child vma still point to the vma->vm_mm of the parent.

The patch fixes it by making the rmap walk accurate during fork. It's not
a big deal normally but it worth being accurate considering the cost is
the same.

Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
Acked-by: Johannes Weiner <jweiner@redhat.com>
Acked-by: Rik van Riel <riel@redhat.com>
Acked-by: Hugh Dickins <hughd@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by Andrea Arcangeli and committed by Linus Torvalds a247c3a9 df08cdc7

+1 -1
+1 -1
kernel/fork.c
··· 356 if (IS_ERR(pol)) 357 goto fail_nomem_policy; 358 vma_set_policy(tmp, pol); 359 if (anon_vma_fork(tmp, mpnt)) 360 goto fail_nomem_anon_vma_fork; 361 tmp->vm_flags &= ~VM_LOCKED; 362 - tmp->vm_mm = mm; 363 tmp->vm_next = tmp->vm_prev = NULL; 364 file = tmp->vm_file; 365 if (file) {
··· 356 if (IS_ERR(pol)) 357 goto fail_nomem_policy; 358 vma_set_policy(tmp, pol); 359 + tmp->vm_mm = mm; 360 if (anon_vma_fork(tmp, mpnt)) 361 goto fail_nomem_anon_vma_fork; 362 tmp->vm_flags &= ~VM_LOCKED; 363 tmp->vm_next = tmp->vm_prev = NULL; 364 file = tmp->vm_file; 365 if (file) {