From 9c1643582ce18c056bc2c7c2b29a355e186d7a81 Mon Sep 17 00:00:00 2001 From: Namhyung Kim Date: Tue, 24 May 2011 17:11:23 -0700 Subject: [PATCH] --- yaml --- r: 250865 b: refs/heads/master c: b951bf2c4693bfc9744e11293be859209f65f579 h: refs/heads/master i: 250863: 42ff1ce5a412c780c07b95bc038a50ab9da67a77 v: v3 --- [refs] | 2 +- trunk/mm/nommu.c | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 6738221002a6..a9b04dd10b56 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6038def0d11b322019d0dbb43f2a611247dfbdb6 +refs/heads/master: b951bf2c4693bfc9744e11293be859209f65f579 diff --git a/trunk/mm/nommu.c b/trunk/mm/nommu.c index 0b16cb4c517b..2454d39dc068 100644 --- a/trunk/mm/nommu.c +++ b/trunk/mm/nommu.c @@ -746,7 +746,6 @@ static void add_vma_to_mm(struct mm_struct *mm, struct vm_area_struct *vma) */ static void delete_vma_from_mm(struct vm_area_struct *vma) { - struct vm_area_struct **pp; struct address_space *mapping; struct mm_struct *mm = vma->vm_mm; @@ -769,12 +768,14 @@ static void delete_vma_from_mm(struct vm_area_struct *vma) /* remove from the MM's tree and list */ rb_erase(&vma->vm_rb, &mm->mm_rb); - for (pp = &mm->mmap; *pp; pp = &(*pp)->vm_next) { - if (*pp == vma) { - *pp = vma->vm_next; - break; - } - } + + if (vma->vm_prev) + vma->vm_prev->vm_next = vma->vm_next; + else + mm->mmap = vma->vm_next; + + if (vma->vm_next) + vma->vm_next->vm_prev = vma->vm_prev; vma->vm_mm = NULL; }