Re: [PATCH v3] mm/ksm: keep soft-dirty when merging a page

From: David Hildenbrand (Arm)

Date: Mon Oct 26 2026 - 05:43:31 EST


On 10/21/26 20:21, Samarth Narang wrote:
> replace_page() maps the KSM page with a PTE built from scratch, so the
> soft-dirty bit of the PTE it replaces is lost. A page written since
> "clear_refs 4" then no longer shows as soft-dirty once it is merged, and
> a soft-dirty based dumper treats it as unchanged.
>
> Copy the soft-dirty bit from the original PTE to the new PTE.
>
> Fixes: 0f8975ec4db2 ("mm: soft-dirty bits for user memory changes tracking")
> Cc: stable@xxxxxxxxxxxxxxx
> Assisted-by: LLM
> Signed-off-by: Samarth Narang <samarth.colleges@xxxxxxxxx>
> ---
>
> Notes:
> v2: https://lore.kernel.org/all/20261019010934.697895-1-samarth.colleges@xxxxxxxxx/
>
> Changes since v2:
> - Keep only the soft-dirty fix, as David suggested; Lance will be handling
> the uffd-wp/RWP part.
> - Fixes tag reduced to the soft-dirty commit.
> - Dropped the Tested-by tag, since the patch changed.
>
> mm/ksm.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/mm/ksm.c b/mm/ksm.c
> index dbfb8f98b189..910a1307ac9f 100644
> --- a/mm/ksm.c
> +++ b/mm/ksm.c
> @@ -1463,6 +1463,10 @@ static int replace_page(struct vm_area_struct *vma, struct page *page,
> dec_mm_counter(mm, MM_ANONPAGES);
> }
>
> + /* Preserve soft-dirty when replacing the page. */
> + if (pte_soft_dirty(orig_pte))
> + newpte = pte_mksoft_dirty(newpte);
> +

Acked-by: David Hildenbrand (Arm) <david@xxxxxxxxxx>

--
Cheers,

David