Re: [PATCH v3 13/13] mm/huge_memory: add and use has_deposited_pgtable()
From: Suren Baghdasaryan
Date: Sat Mar 28 2026 - 15:58:57 EST
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!
Reviewed-by: Suren Baghdasaryan <surenb@xxxxxxxxxx>
>
> ----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