[PATCH v2 0/2] mm/vdso: make offset_in_page() usable without linux/mm.h
From: Thorsten Blum
Date: Thu May 21 2026 - 05:10:12 EST
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.
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