Re: [PATCH v3 13/13] mm/huge_memory: add and use has_deposited_pgtable()
From: Lorenzo Stoakes (Oracle)
Date: Mon Mar 30 2026 - 05:54:49 EST
On Sat, Mar 28, 2026 at 12:54:38PM -0700, Suren Baghdasaryan wrote:
> On Mon, Mar 23, 2026 at 5:25 AM Lorenzo Stoakes (Oracle) <ljs@xxxxxxxxxx> wrote:
> >
> > On Mon, Mar 23, 2026 at 11:45:23AM +0000, Lorenzo Stoakes (Oracle) wrote:
> > > Hi Andrew,
> > >
> > > Could you apply the below fix-patch to resolve an issue with us performing
> > > folio_put() on a folio before checking it again to see if a table was
> > > deposited, as per Sashiko.
> > >
> > > This patch resolves the issue by storing whether or not this is the case in
> > > a has_deposit local variable (as used previously) before invoking
> > > zap_huge_pmd_folio(), then using this boolean to determine whether or not
> > > to zap any deposited table.
> >
> > Oops this is wrong...!
> >
> > Please apply the below instead :)
> >
> > Thanks, Lorenzo
>
> With the fix LGTM. Overall very nice cleanup making the code much more
> readable. Thanks Lorenzo!
Thanks :)
>
> Reviewed-by: Suren Baghdasaryan <surenb@xxxxxxxxxx>
Thanks for the review!
Cheers, Lorenzo
>
> >
> > ----8<----
> > From e6d58747d00dd954c605201e97f8b769b2ba8cf8 Mon Sep 17 00:00:00 2001
> > From: "Lorenzo Stoakes (Oracle)" <ljs@xxxxxxxxxx>
> > Date: Mon, 23 Mar 2026 11:42:01 +0000
> > Subject: [PATCH] fix
> >
> > Signed-off-by: Lorenzo Stoakes (Oracle) <ljs@xxxxxxxxxx>
> > ---
> > mm/huge_memory.c | 5 +++--
> > 1 file changed, 3 insertions(+), 2 deletions(-)
> >
> > diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> > index 610a6184e92c..b2a6060b3c20 100644
> > --- a/mm/huge_memory.c
> > +++ b/mm/huge_memory.c
> > @@ -2397,6 +2397,7 @@ bool zap_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma,
> > struct mm_struct *mm = tlb->mm;
> > struct folio *folio = NULL;
> > bool is_present = false;
> > + bool has_deposit;
> > spinlock_t *ptl;
> > pmd_t orig_pmd;
> >
> > @@ -2418,10 +2419,10 @@ bool zap_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma,
> >
> > is_present = pmd_present(orig_pmd);
> > folio = normal_or_softleaf_folio_pmd(vma, addr, orig_pmd, is_present);
> > + has_deposit = has_deposited_pgtable(vma, orig_pmd, folio);
> > if (folio)
> > zap_huge_pmd_folio(mm, vma, orig_pmd, folio, is_present);
> > -
> > - if (has_deposited_pgtable(vma, orig_pmd, folio))
> > + if (has_deposit)
> > zap_deposited_table(mm, pmd);
> >
> > spin_unlock(ptl);
> > --
> > 2.53.0