Re: [PATCH] mm/huge_memory: update file PUD counter before folio_put()
From: Dev Jain
Date: Wed May 27 2026 - 06:25:13 EST
On 26/05/26 3:43 pm, Yin Tirui wrote:
> __split_huge_pud_locked() updates the file/shmem RSS counter after
> dropping the PUD mapping's folio reference. If folio_put() drops the
> last reference, mm_counter_file() can later read freed folio state via
> folio_test_swapbacked().
>
> Move the counter update before folio_put().
>
> Fixes: dbe54153296d ("mm/huge_memory: add vmf_insert_folio_pud()")
> Cc: <stable@xxxxxxxxxxxxxxx>
> Signed-off-by: Yin Tirui <yintirui@xxxxxxxxxx>
> ---
Reviewed-by: Dev Jain <dev.jain@xxxxxxx>
> mm/huge_memory.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> index a5f4a48b7b77..9832ee910d5e 100644
> --- a/mm/huge_memory.c
> +++ b/mm/huge_memory.c
> @@ -3027,9 +3027,9 @@ static void __split_huge_pud_locked(struct vm_area_struct *vma, pud_t *pud,
> if (!folio_test_referenced(folio) && pud_young(old_pud))
> folio_set_referenced(folio);
> folio_remove_rmap_pud(folio, page, vma);
> - folio_put(folio);
> add_mm_counter(vma->vm_mm, mm_counter_file(folio),
> -HPAGE_PUD_NR);
> + folio_put(folio);
> }
>
> void __split_huge_pud(struct vm_area_struct *vma, pud_t *pud,