struct page *next, *page;
        unsigned int nr = 1;
 
-       next = start + i;
+       next = nth_page(start, i);
        page = compound_head(next);
        if (PageHead(page))
                nr = min_t(unsigned int,
 {
        int nr;
 
-       for (nr = 0; addr != end; addr += PAGE_SIZE)
-               pages[nr++] = page++;
+       for (nr = 0; addr != end; nr++, addr += PAGE_SIZE)
+               pages[nr] = nth_page(page, nr);
 
        return nr;
 }
        VM_BUG_ON(!pfn_valid(pte_pfn(pte)));
 
        head = pte_page(pte);
-       page = head + ((addr & (sz-1)) >> PAGE_SHIFT);
+       page = nth_page(head, (addr & (sz - 1)) >> PAGE_SHIFT);
        refs = record_subpages(page, addr, end, pages + *nr);
 
        head = try_grab_compound_head(head, refs, flags);
                                             pages, nr);
        }
 
-       page = pmd_page(orig) + ((addr & ~PMD_MASK) >> PAGE_SHIFT);
+       page = nth_page(pmd_page(orig), (addr & ~PMD_MASK) >> PAGE_SHIFT);
        refs = record_subpages(page, addr, end, pages + *nr);
 
        head = try_grab_compound_head(pmd_page(orig), refs, flags);
                                             pages, nr);
        }
 
-       page = pud_page(orig) + ((addr & ~PUD_MASK) >> PAGE_SHIFT);
+       page = nth_page(pud_page(orig), (addr & ~PUD_MASK) >> PAGE_SHIFT);
        refs = record_subpages(page, addr, end, pages + *nr);
 
        head = try_grab_compound_head(pud_page(orig), refs, flags);
 
        BUILD_BUG_ON(pgd_devmap(orig));
 
-       page = pgd_page(orig) + ((addr & ~PGDIR_MASK) >> PAGE_SHIFT);
+       page = nth_page(pgd_page(orig), (addr & ~PGDIR_MASK) >> PAGE_SHIFT);
        refs = record_subpages(page, addr, end, pages + *nr);
 
        head = try_grab_compound_head(pgd_page(orig), refs, flags);