Re: [PATCH v3 13/47] mm/huge_memory: fix truncate racing with PMD zapping
From: Baolin Wang
Date: Mon Nov 02 2026 - 02:59:47 EST
On 10/31/26 5:39 PM, David Hildenbrand (Arm) wrote:
From: Chris Mason <mason@xxxxxxxxxx>
zap_huge_pmd_folio() removes the rmap before calling folio_mark_dirty().
If this was the last mapping, truncation can skip unmapping the folio
and proceed without waiting for the PMD lock, racing with dirtying.
ifs_set_range_dirty() can oops if MADV_DONTNEED races with
ftruncate() on XFS, when we get the folio set dirty after it was found
to not be mapped anymore.
Move folio_mark_dirty() and folio_mark_accessed() before rmap removal,
matching the PTE zap path. This keeps the folio mapped while updating
its state, so truncation must wait for the page table lock.
Fix generated by an LLM and sent by Chris Mason in private.
Fixes: fe6cf984939d ("mm/huge_memory: transfer the pmd dirty bit to the folio on zap")
Cc: stable@xxxxxxxxxxxxxxx
Signed-off-by: Chris Mason <mason@xxxxxxxxxx>
[ david: simplify comment and description ]
Reviewed-by: Gregory Price (Meta) <gourry@xxxxxxxxxx>
Tested-by: Muhammad Usama Anjum <usama.anjum@xxxxxxx>
Signed-off-by: David Hildenbrand (Arm) <david@xxxxxxxxxx>
---
I checked the memory ordering issues, and it looks like the implicit barriers provided by the fully ordered atomic operations already ensure the required ordering. So LGTM.
Reviewed-by: Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx>