/* At what user virtual address is page expected in @vma? Returns virtual address or -EFAULT if page's index/offset is not within the range mapped the @vma.  */
static unsigned long vma_address(struct page *page, struct vm_area_struct *vma)
/* At what user virtual address is page expected in @vma? Returns virtual address or -EFAULT if page's index/offset is not within the range mapped the @vma.  */
static unsigned long vma_address(struct page *page, struct vm_area_struct *vma)
{
	pgoff_t pgoff = page->index << (PAGE_CACHE_SHIFT - PAGE_SHIFT);
	unsigned long address;
	address = vma->vm_start + ((pgoff - vma->vm_pgoff) << PAGE_SHIFT);
	if (unlikely(address < vma->vm_start || address >= vma->vm_end)) {
		return -EFAULT;
	}
	return address;
}