aboutsummaryrefslogtreecommitdiffstats
path: root/mm/nommu.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/nommu.c')
-rw-r--r--mm/nommu.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/mm/nommu.c b/mm/nommu.c
index 0b16cb4c517b..2454d39dc068 100644
--- a/mm/nommu.c
+++ b/mm/nommu.c
@@ -746,7 +746,6 @@ static void add_vma_to_mm(struct mm_struct *mm, struct vm_area_struct *vma)
746 */ 746 */
747static void delete_vma_from_mm(struct vm_area_struct *vma) 747static void delete_vma_from_mm(struct vm_area_struct *vma)
748{ 748{
749 struct vm_area_struct **pp;
750 struct address_space *mapping; 749 struct address_space *mapping;
751 struct mm_struct *mm = vma->vm_mm; 750 struct mm_struct *mm = vma->vm_mm;
752 751
@@ -769,12 +768,14 @@ static void delete_vma_from_mm(struct vm_area_struct *vma)
769 768
770 /* remove from the MM's tree and list */ 769 /* remove from the MM's tree and list */
771 rb_erase(&vma->vm_rb, &mm->mm_rb); 770 rb_erase(&vma->vm_rb, &mm->mm_rb);
772 for (pp = &mm->mmap; *pp; pp = &(*pp)->vm_next) { 771
773 if (*pp == vma) { 772 if (vma->vm_prev)
774 *pp = vma->vm_next; 773 vma->vm_prev->vm_next = vma->vm_next;
775 break; 774 else
776 } 775 mm->mmap = vma->vm_next;
777 } 776
777 if (vma->vm_next)
778 vma->vm_next->vm_prev = vma->vm_prev;
778 779
779 vma->vm_mm = NULL; 780 vma->vm_mm = NULL;
780} 781}