mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
df08cdc7ef
commit
a247c3a97a
|
@ -356,10 +356,10 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
|
||||||
if (IS_ERR(pol))
|
if (IS_ERR(pol))
|
||||||
goto fail_nomem_policy;
|
goto fail_nomem_policy;
|
||||||
vma_set_policy(tmp, pol);
|
vma_set_policy(tmp, pol);
|
||||||
|
tmp->vm_mm = mm;
|
||||||
if (anon_vma_fork(tmp, mpnt))
|
if (anon_vma_fork(tmp, mpnt))
|
||||||
goto fail_nomem_anon_vma_fork;
|
goto fail_nomem_anon_vma_fork;
|
||||||
tmp->vm_flags &= ~VM_LOCKED;
|
tmp->vm_flags &= ~VM_LOCKED;
|
||||||
tmp->vm_mm = mm;
|
|
||||||
tmp->vm_next = tmp->vm_prev = NULL;
|
tmp->vm_next = tmp->vm_prev = NULL;
|
||||||
file = tmp->vm_file;
|
file = tmp->vm_file;
|
||||||
if (file) {
|
if (file) {
|
||||||
|
|
Loading…
Reference in New Issue