Re: [PATCH v2 0/2] mm/vdso: make offset_in_page() usable without linux/mm.h
From: Lorenzo Stoakes
Date: Thu May 21 2026 - 07:36:53 EST
On Thu, May 21, 2026 at 11:06:56AM +0200, Thorsten Blum wrote:
> offset_in_page() is a small page-arithmetic helper that has been around
> for 20+ years. However, page-offset calculations are still open-coded in
> many places and in different ways:
>
> (unsigned long)p & ~PAGE_MASK
> (unsigned long)p & (PAGE_SIZE - 1)
> (long)p & (PAGE_SIZE - 1)
> ...
>
> Some of these open-coded instances may be due to offset_in_page() being
> buried 3000+ lines into linux/mm.h; others may have avoided including
> linux/mm.h, which is a large header that pulls in many others.
This is good but I think you're still missing the 'why' here (as to why files
don't import mm.h, and thus what this series addreses), which presumably, is
compile time.
>
> Patch 1 moves offset_in_page() from linux/mm.h to vdso/page.h, which
> keeps the helper with other low-level page definitions and allows users
> that only need offset_in_page() to avoid including linux/mm.h.
>
> Patch 2 shows a concrete example where including vdso/page.h is
> sufficient and including the large linux/mm.h would be unnecessary.
>
> Existing users of offset_in_page() do not need to change because patch 1
> also includes vdso/page.h from linux/mm.h.
>
> This series is based on akpm/mm.git mm-nonmm-unstable commit
> d067a83c8063 ("string: use min in sized_strscpy"), which is also in
> linux-next.
>
> Changes in v2:
> - Add a cover letter and drop the bytes_to_page_end() helper
> - Move offset_in_page() to vdso/page.h as suggested by David and Lorenzo
> - Use offset_in_page() in lib/string.c as an example since
> bitmap_print_to_pagebuf() in lib/bitmap-str.c is being removed [1]
> - v1: https://lore.kernel.org/lkml/20260517123428.1181981-4-thorsten.blum@xxxxxxxxx/
>
> [1] https://lore.kernel.org/lkml/20260519163058.953690-3-ynorov@xxxxxxxxxx/
> ---
> Thorsten Blum (2):
> vdso: move offset_in_page() from linux/mm.h to vdso/page.h
> string: use offset_in_page() in sized_strscpy()
>
> include/linux/mm.h | 2 +-
> include/vdso/page.h | 2 ++
> lib/string.c | 3 ++-
> 3 files changed, 5 insertions(+), 2 deletions(-)
>
>
> base-commit: d067a83c8063d1bdcbd9af8e1326d846f85138b8