diff options
Diffstat (limited to 'mm/mmap.c')
-rw-r--r-- | mm/mmap.c | 15 |
1 files changed, 0 insertions, 15 deletions
@@ -554,9 +554,7 @@ again: remove_next = 1 + (end > next->vm_end); | |||
554 | */ | 554 | */ |
555 | if (importer && !importer->anon_vma) { | 555 | if (importer && !importer->anon_vma) { |
556 | /* Block reverse map lookups until things are set up. */ | 556 | /* Block reverse map lookups until things are set up. */ |
557 | importer->vm_flags |= VM_LOCK_RMAP; | ||
558 | if (anon_vma_clone(importer, vma)) { | 557 | if (anon_vma_clone(importer, vma)) { |
559 | importer->vm_flags &= ~VM_LOCK_RMAP; | ||
560 | return -ENOMEM; | 558 | return -ENOMEM; |
561 | } | 559 | } |
562 | importer->anon_vma = anon_vma; | 560 | importer->anon_vma = anon_vma; |
@@ -618,11 +616,6 @@ again: remove_next = 1 + (end > next->vm_end); | |||
618 | __vma_unlink(mm, next, vma); | 616 | __vma_unlink(mm, next, vma); |
619 | if (file) | 617 | if (file) |
620 | __remove_shared_vm_struct(next, file, mapping); | 618 | __remove_shared_vm_struct(next, file, mapping); |
621 | /* | ||
622 | * This VMA is now dead, no need for rmap to follow it. | ||
623 | * Call anon_vma_merge below, outside of i_mmap_lock. | ||
624 | */ | ||
625 | next->vm_flags |= VM_LOCK_RMAP; | ||
626 | } else if (insert) { | 619 | } else if (insert) { |
627 | /* | 620 | /* |
628 | * split_vma has split insert from vma, and needs | 621 | * split_vma has split insert from vma, and needs |
@@ -635,20 +628,12 @@ again: remove_next = 1 + (end > next->vm_end); | |||
635 | if (mapping) | 628 | if (mapping) |
636 | spin_unlock(&mapping->i_mmap_lock); | 629 | spin_unlock(&mapping->i_mmap_lock); |
637 | 630 | ||
638 | /* | ||
639 | * The current VMA has been set up. It is now safe for the | ||
640 | * rmap code to get from the pages to the ptes. | ||
641 | */ | ||
642 | if (anon_vma && importer) | ||
643 | importer->vm_flags &= ~VM_LOCK_RMAP; | ||
644 | |||
645 | if (remove_next) { | 631 | if (remove_next) { |
646 | if (file) { | 632 | if (file) { |
647 | fput(file); | 633 | fput(file); |
648 | if (next->vm_flags & VM_EXECUTABLE) | 634 | if (next->vm_flags & VM_EXECUTABLE) |
649 | removed_exe_file_vma(mm); | 635 | removed_exe_file_vma(mm); |
650 | } | 636 | } |
651 | /* Protected by mmap_sem and VM_LOCK_RMAP. */ | ||
652 | if (next->anon_vma) | 637 | if (next->anon_vma) |
653 | anon_vma_merge(vma, next); | 638 | anon_vma_merge(vma, next); |
654 | mm->map_count--; | 639 | mm->map_count--; |