]> 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>
Tue, 5 Jan 2021 17:30:25 +0000 (12:30 -0500)
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
mm/mmap.c

index 24537cc57c1fa389ae50f61222c7e8ed6618cb27..0a12446b25ad245e37e8de17bfb4dbb5620b7f06 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;
 }