From: Longlong Xia <redacted>
Pass the source and target folios directly to replace_page(). Any
large source folio has already been split; KSM and zero-page targets
are order-0.
No functional change intended.
Assisted-by: Zcode:GLM-5.3
Signed-off-by: Longlong Xia <redacted>
---
mm/ksm.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/mm/ksm.c b/mm/ksm.c
index 8884964d5a53..4a4347e9ce39 100644
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -1453,18 +1453,18 @@ static int write_protect_page(struct vm_area_struct *vma, struct folio *folio,
/**
* replace_page - replace page in vma by new ksm page
* @vma: vma that holds the pte pointing to page
- * @page: the page we are replacing by kpage
- * @kpage: the ksm page we replace page by
+ * @folio: the folio we are replacing by kfolio
+ * @kfolio: the ksm folio we replace folio by
* @orig_pte: the original value of the pte
*
* Returns 0 on success, -EFAULT on failure.
*/
-static int replace_page(struct vm_area_struct *vma, struct page *page,
- struct page *kpage, pte_t orig_pte)
+static int replace_page(struct vm_area_struct *vma, struct folio *folio,
+ struct folio *kfolio, pte_t orig_pte)
{
- struct folio *kfolio = page_folio(kpage);
+ struct page *page = folio_page(folio, 0);
+ struct page *kpage = folio_page(kfolio, 0);
struct mm_struct *mm = vma->vm_mm;
- struct folio *folio = page_folio(page);
pmd_t *pmd;
pmd_t pmde;
pte_t *ptep;@@ -1613,7 +1613,8 @@ static int try_to_merge_one_page(struct vm_area_struct *vma,
folio_mark_dirty(folio);
err = 0;
} else if (pages_identical(page, kpage))
- err = replace_page(vma, page, kpage, orig_pte);
+ err = replace_page(vma, folio, page_folio(kpage),
+ orig_pte);
}
out_unlock:
--
2.43.0