On Fri, May 15, 2026 at 05:09:02PM +0200, Thorsten Blum wrote:
> On Fri, May 15, 2026 at 09:45:08AM +0300, Andy Shevchenko wrote:
> > On Thu, May 14, 2026 at 7:56 PM Thorsten Blum <[email protected]>
> > wrote:
...
> > > - if ((long)src & (sizeof(long) - 1)) {
> > > - size_t limit = PAGE_SIZE - ((long)src & (PAGE_SIZE - 1));
> > > - if (limit < max)
> > > - max = limit;
> > > - }
> > > + if ((long)src & (sizeof(long) - 1))
> > > + max = min(PAGE_SIZE - ((long)src & (PAGE_SIZE - 1)), max);
> >
> > Side note: Isn't simply
> > max = min(PAGE_SIZE - offset_in_page(src), max);
> >
> > ? (One will need to include linux/mm.h for this, though.)
>
> I thought about it, but wasn't sure if pulling in all of linux/mm.h into
> lib/string.c is worth it.
>
> > Moreover there are plenty of duplications to count the size in the
> > first page and even the similar min() as in
> > fs/iomap/buffered-io.c:869
> > arch/s390/kvm/gaccess.c:976
> > and many more...
> >
> > Perhaps a new macro with a good (famous last words!) naming?
>
> How about adding
>
> #define offset_in_page(p) ((unsigned long)(p) & ~PAGE_MASK)
> #define bytes_to_page_end(p) (PAGE_SIZE - offset_in_page(p))
>
> to a new header, e.g. include/linux/page_helpers.h? There are about 50+
> direct replacements and possibly more.
I checked existing linux/page*.h and have no better naming, so all looks
like a good idea to me. Because there are more (existing!) users of mm.h
just for offset_in_page().
--
With Best Regards,
Andy Shevchenko