We already have vma_last_pgoff() which retrieves the last page offset within a VMA.
However, code often wishes to span a page offset range, which requires the exclusive end of this range. So provide this in vma_end_pgoff() and update vma_last_pgoff() to use this function. Also update the VMA userland tests to reflect the change. No functional change intended. Reviewed-by: Gregory Price <[email protected]> Reviewed-by: Pedro Falcato <[email protected]> Reviewed-by: Vlastimil Babka (SUSE) <[email protected]> Signed-off-by: Lorenzo Stoakes <[email protected]> --- include/linux/mm.h | 19 ++++++++++++++++++- tools/testing/vma/include/dup.h | 5 +++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index abac72785277..c56ca22d406c 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -4331,6 +4331,23 @@ static inline pgoff_t vma_start_pgoff(const struct vm_area_struct *vma) return vma->vm_pgoff; } +/** + * vma_end_pgoff() - Get the page offset of the exclusive end of @vma + * @vma: The VMA whose end page offset is required. + * + * This returns the exclusive end page offset of @vma, which is useful for + * expressing page offset ranges. + * + * See the description of vma_start_pgoff() for a description of VMA page + * offsets. + * + * Returns: The exclusive end page offset of @vma. + */ +static inline pgoff_t vma_end_pgoff(const struct vm_area_struct *vma) +{ + return vma_start_pgoff(vma) + vma_pages(vma); +} + /** * vma_last_pgoff() - Get the page offset of the last page in @vma * @vma: The VMA whose last page offset is required. @@ -4344,7 +4361,7 @@ static inline pgoff_t vma_start_pgoff(const struct vm_area_struct *vma) */ static inline pgoff_t vma_last_pgoff(const struct vm_area_struct *vma) { - return vma_start_pgoff(vma) + vma_pages(vma) - 1; + return vma_end_pgoff(vma) - 1; } static inline unsigned long vma_desc_size(const struct vm_area_desc *desc) diff --git a/tools/testing/vma/include/dup.h b/tools/testing/vma/include/dup.h index 668650067c7c..535747d7fee4 100644 --- a/tools/testing/vma/include/dup.h +++ b/tools/testing/vma/include/dup.h @@ -1306,6 +1306,11 @@ static inline pgoff_t vma_start_pgoff(const struct vm_area_struct *vma) return vma->vm_pgoff; } +static inline pgoff_t vma_end_pgoff(const struct vm_area_struct *vma) +{ + return vma_start_pgoff(vma) + vma_pages(vma); +} + static inline int vfs_mmap_prepare(struct file *file, struct vm_area_desc *desc) { return file->f_op->mmap_prepare(desc); -- 2.55.0
