Re: [PATCH v4 4/5] ksm: Optimize rmap_walk_ksm by passing a suitable address range
From: Lorenzo Stoakes
Date: Fri May 15 2026 - 08:30:42 EST
On Fri, May 15, 2026 at 03:13:44PM +0800, xu.xin16@xxxxxxxxxx wrote:
> > > diff --git a/mm/ksm.c b/mm/ksm.c
> > > index 0299a53ba7c9..a13184d00759 100644
> > > --- a/mm/ksm.c
> > > +++ b/mm/ksm.c
> > > @@ -3200,6 +3200,7 @@ void rmap_walk_ksm(struct folio *folio, struct rmap_walk_control *rwc)
> > > hlist_for_each_entry(rmap_item, &stable_node->hlist, hlist) {
> > > /* Ignore the stable/unstable/sqnr flags */
> > > const unsigned long addr = rmap_item->address & PAGE_MASK;
> > > + const unsigned long vm_pgoff = rmap_item->vm_pgoff;
> > > struct anon_vma *anon_vma = rmap_item->anon_vma;
> > > struct anon_vma_chain *vmac;
> > > struct vm_area_struct *vma;
> > > @@ -3213,8 +3214,12 @@ void rmap_walk_ksm(struct folio *folio, struct rmap_walk_control *rwc)
> > > anon_vma_lock_read(anon_vma);
> > > }
> > >
> > > + /*
> > > + * Currently KSM folios are order-0 normal pages, so pgoff_end
> > > + * should be the same as pgoff_start.
> > > + */
> > > anon_vma_interval_tree_foreach(vmac, &anon_vma->rb_root,
> > > - 0, ULONG_MAX) {
> > > + vm_pgoff, vm_pgoff) {
> >
> > But vm_pgoff would just correspond to the start of the VMA, not where the page
> > is actually mapped?
> >
> > I'd assume you really want the linear page index of the original page?
>
> Right. I've reconsidered and realized that using vm_pgoff is indeed unstable.
Your email client is inserting (kinda) HTML :) & apos ; -> ' please tell it to
behave :P
>
> My initial idea was: as long as we can find the VMA that maps this page,
> it's sufficient for anon_vma_interval_tree_foreach() to check whether
> "vm_pgoff <= pgoff of the original page <= (vm_pgoff + vma_pages(v) - 1)".
>
> However, the flaw here is that the VMA may be split(e.g., due to madvise or mprotect),
> causing vma_pages(v) to change, thereby making this condition no longer satisfied.
>
> Indeed, it's better to use the linear page index of the original page.
Yup :)
Partially mapped large folios would cause weirdness also but KSM uses order-0
right? So probably not a thing.
>
> I'll send v5 to correct this.
>
> >
> > --
> > Cheers,
> >
> > David
> >
Cheers, Lorenzo