VM: can't go through the inner loop in unmap_vmas() more than once...
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 5 Mar 2012 18:35:49 +0000 (13:35 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 21 Mar 2012 01:39:50 +0000 (21:39 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
mm/memory.c

index 1b6712a9720df64b53ef42a35b00172008c5ea99..f2317c85704e5469f4475d8417d06041e26d0637 100644 (file)
@@ -1354,7 +1354,7 @@ unsigned long unmap_vmas(struct mmu_gather *tlb,
                if (unlikely(is_pfn_mapping(vma)))
                        untrack_pfn_vma(vma, 0, 0);
 
-               while (start != end) {
+               if (start != end) {
                        if (unlikely(is_vm_hugetlb_page(vma))) {
                                /*
                                 * It is undesirable to test vma->vm_file as it
@@ -1371,8 +1371,8 @@ unsigned long unmap_vmas(struct mmu_gather *tlb,
                                        unmap_hugepage_range(vma, start, end, NULL);
                        } else
                                unmap_page_range(tlb, vma, start, end, details);
-                       start = end;
                }
+               start = end;
        }
 
        mmu_notifier_invalidate_range_end(mm, start_addr, end_addr);