On 4/5/24 3:23 PM, David Hildenbrand wrote: > On 25.03.24 13:48, alexs@xxxxxxxxxx wrote: >> From: "Alex Shi (tencent)" <alexs@xxxxxxxxxx> >> >> Compound page is checked and skipped before write_protect_page() called, >> use folio to save a few compound_head checking. >> >> Signed-off-by: Alex Shi (tencent) <alexs@xxxxxxxxxx> >> Cc: Izik Eidus <izik.eidus@xxxxxxxxxxxxxxxxxx> >> Cc: Matthew Wilcox <willy@xxxxxxxxxxxxx> >> Cc: Andrea Arcangeli <aarcange@xxxxxxxxxx> >> Cc: Hugh Dickins <hughd@xxxxxxxxxx> >> Cc: Chris Wright <chrisw@xxxxxxxxxxxx> >> --- >> mm/ksm.c | 22 +++++++++++----------- >> 1 file changed, 11 insertions(+), 11 deletions(-) >> >> diff --git a/mm/ksm.c b/mm/ksm.c >> index 95a487a21eed..5d1f62e7462a 100644 >> --- a/mm/ksm.c >> +++ b/mm/ksm.c >> @@ -1289,22 +1289,22 @@ static u32 calc_checksum(struct page *page) >> return checksum; >> } >> -static int write_protect_page(struct vm_area_struct *vma, struct page *page, >> +static int write_protect_page(struct vm_area_struct *vma, struct folio *folio, >> pte_t *orig_pte) >> { >> struct mm_struct *mm = vma->vm_mm; >> - DEFINE_PAGE_VMA_WALK(pvmw, page, vma, 0, 0); >> + DEFINE_FOLIO_VMA_WALK(pvmw, folio, vma, 0, 0); >> int swapped; >> int err = -EFAULT; >> struct mmu_notifier_range range; >> bool anon_exclusive; >> pte_t entry; >> - pvmw.address = page_address_in_vma(page, vma); >> + pvmw.address = page_address_in_vma(&folio->page, vma); >> if (pvmw.address == -EFAULT) >> goto out; >> - BUG_ON(PageTransCompound(page)); >> + VM_BUG_ON(folio_test_large(folio)); > > I suggest > > if (WARN_ON_ONCE(folio_test_large(folio))) > return err; > > before the page_address_in_vma() call. > Thanks for the suggestion, will take it. > > Reviewed-by: David Hildenbrand <david@xxxxxxxxxx> >