Re: [PATCH v3 13/13] mm/huge_memory: add and use has_deposited_pgtable()

Lorenzo Stoakes (Oracle)
2026-03-23T12:25:10Z

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

----8<----
From e6d58747d00dd954c605201e97f8b769b2ba8cf8 Mon Sep 17 00:00:00 2001
From: "Lorenzo Stoakes (Oracle)" <ljs@kernel.org>
Date: Mon, 23 Mar 2026 11:42:01 +0000
Subject: [PATCH] fix

Signed-off-by: Lorenzo Stoakes (Oracle) <ljs@kernel.org>
---
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