]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm/mmap: Fix accounting in count_vma_pages_range
authorLiam R. Howlett <Liam.Howlett@Oracle.com>
Fri, 11 Sep 2020 01:36:59 +0000 (21:36 -0400)
committerLiam R. Howlett <Liam.Howlett@Oracle.com>
Fri, 30 Oct 2020 19:11:40 +0000 (15:11 -0400)
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
mm/mmap.c

index 4a5b66849c6f3ecf5e8c406c226c1507d78e98b0..06b884ac475f528e6095b9346676ec5c23c6faa1 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -528,6 +528,7 @@ static unsigned long count_vma_pages_range(struct mm_struct *mm,
        unsigned long nr_pages = 0;
        struct vm_area_struct *vma;
        unsigned long vm_start, vm_end;
+       MA_STATE(mas, &mm->mm_mt, addr, addr);
 
        /* Find first overlaping mapping */
        vma = find_vma_intersection(mm, addr, end);
@@ -540,8 +541,12 @@ static unsigned long count_vma_pages_range(struct mm_struct *mm,
        nr_pages = (min(end, vm_end) - max(addr, vm_start)) >> PAGE_SHIFT;
 
        /* Iterate over the rest of the overlaps */
-       mt_for_each(&mm->mm_mt, vma, addr, end)
+       mas.start = mas.end = vm_end;
+       mas_for_each(mas, vma, end) {
+               vm_start = vma->vm_start;
+               vm_end = vma->vm_end;
                nr_pages += (min(end, vm_end) - vm_start) >> PAGE_SHIFT;
+       }
 
        return nr_pages;
 }