Re: [PATCH v4 03/20] mm: introduce linear_anon_page_index()

"Lorenzo Stoakes (ARM)" <[email protected]>
Newsgroups org.kernel.vger.linux-kselftest,org.freedesktop.lists.amd-gfx,org.freedesktop.lists.dri-devel,org.freedesktop.lists.intel-xe,org.kernel.vger.kvm,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-perf-users,org.kernel.vger.linux-s390,org.kernel.vger.linux-trace-kernel,org.kvack.linux-mm
Message-ID <anmNojqwGzdiLkIm@lucifer>
On Sat, Aug 08, 2026 at 05:49:48PM -0700, Suren Baghdasaryan wrote:
> On Thu, Aug 6, 2026 at 1:23 PM Lorenzo Stoakes (ARM) <[email protected]> wrote:
> >
> > This function provides the anonymous equivalent of linear_page_index(),
> > instead offsetting based on the anonymous page offset of the VMA.
> >
> > It is valid only for anonymous or MAP_PRIVATE file-backed mappings, in
> > other words CoW mappings.
> >
> > For pure anon VMAs, this will be equal to linear_page_index().
> >
> > Assert that both of these invariants are true In linear_anon_page_index()
>
> s/In/in

Ack. I ran these patches through claude several times and it didn't get this ;)
the machines are not taking over just yet...

Andrew - could you change this in-place? Thanks!

> > diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
> > index c6fc783aaee5..0adfa6605653 100644
> > --- a/include/linux/pagemap.h
> > +++ b/include/linux/pagemap.h
> > @@ -1094,10 +1094,44 @@ static inline pgoff_t linear_page_delta(const struct vm_area_struct *vma,
> >  static inline pgoff_t linear_page_index(const struct vm_area_struct *vma,
> >                                         const unsigned long address)
> >  {
> > -       pgoff_t pgoff;
> > +       return linear_page_delta(vma, address) + vma_start_pgoff(vma);
> > +}
> > +
> > +static inline pgoff_t __linear_anon_page_index(const struct vm_area_struct *vma,
> > +               const unsigned long address)
> > +{
> > +       return linear_page_delta(vma, address) + vma_start_anon_pgoff(vma);
> > +}
> > +
> > +/**
> > + * linear_anon_page_index() - Determine the absolute anonymous page offset of
> > + * @address within @vma.
> > + * @vma: An anonymous or MAP_PRIVATE file-backed VMA in which @address resides.
> > + * @address: The address whose absolute page offset is required.
> > + *
> > + * This returns the anonymous page offset of @address, which is the page offset
> > + * the address possessed at the time the VMA was first faulted.
> > + *
> > + * For anonymous mappings, this returns the same value as linear_page_index().
> > + *
> > + * For MAP_PRIVATE file-backed mappings, this returns the anonymous page offset
> > + * of @address, which is the page offset the address possessed at the time the
> > + * VMA was first faulted.
> > + *
> > + * It is not valid to call this function for shared file-backed mappings.
> > + *
> > + * Returns: The absolute anonymous page offset of @address within @vma.
> > + */
> > +static inline pgoff_t linear_anon_page_index(const struct vm_area_struct *vma,
> > +               const unsigned long address)
> > +{
> > +       const pgoff_t pgoff = __linear_anon_page_index(vma, address);
> > +
> > +       VM_WARN_ON_ONCE(!vma_is_cow_mapping(vma));
>
> As discussed off the list, this assertion works even for read-only
> anon mappings because, as you said, "there's no such thing as a pure
> anon mapping that is !VMA_MAYWRITE_BIT, there is no way to achieve
> that."
> It took me some time to see that after reading your discussion with
> David at [1] and [2], and I don't think it's very intuitive. Could you
> please add a comment explaining that? Maybe add a comment at
> vma_is_cow_mapping() definition since you are using the same assertion
> in another patch of this series?

Sure will do! It is very confusing stuff (and I was duly confused also at
first).

To save a respin (unless there's more stuff I need to address) I will probably
reply to the relevant patch with a proposed new comment.

>
> [1] https://lore.kernel.org/linux-mm/anBjpdMicqaGADr-@lucifer/
> [2] https://lore.kernel.org/linux-mm/anLyhaI6kW-EWk13@lucifer/

--
Cheers, Lorenzo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.