On Mon, Aug 10, 2026 at 1:40 AM Lorenzo Stoakes (ARM) <[email protected]> wrote: > > 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.
Sounds good! > > > > > [1] https://lore.kernel.org/linux-mm/anBjpdMicqaGADr-@lucifer/ > > [2] https://lore.kernel.org/linux-mm/anLyhaI6kW-EWk13@lucifer/ > > -- > Cheers, Lorenzo
