static int __rb_map_vma(struct ring_buffer_per_cpu *cpu_buffer,
                        struct vm_area_struct *vma)
 {
-       unsigned long nr_subbufs, nr_pages, vma_pages, pgoff = vma->vm_pgoff;
+       unsigned long nr_subbufs, nr_pages, nr_vma_pages, pgoff = vma->vm_pgoff;
        unsigned int subbuf_pages, subbuf_order;
        struct page **pages;
        int p = 0, s = 0;
        nr_subbufs = cpu_buffer->nr_pages + 1; /* + reader-subbuf */
        nr_pages = ((nr_subbufs) << subbuf_order) - pgoff + 1; /* + meta-page */
 
-       vma_pages = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;
-       if (!vma_pages || vma_pages > nr_pages)
+       nr_vma_pages = vma_pages(vma);
+       if (!nr_vma_pages || nr_vma_pages > nr_pages)
                return -EINVAL;
 
-       nr_pages = vma_pages;
+       nr_pages = nr_vma_pages;
 
        pages = kcalloc(nr_pages, sizeof(*pages), GFP_KERNEL);
        if (!pages)