On Wed, Aug 02, 2023 at 05:53:43PM +0800, Kefeng Wang wrote: > err = -EACCES; > - if (page_mapcount(page) > 1 && !migrate_all) > - goto out_putpage; > + if (folio_estimated_sharers(folio) > 1 && !migrate_all) > + goto out_putfolio; I do not think this is the correct change. Maybe leave this line alone. > - if (PageHuge(page)) { > - if (PageHead(page)) { > - isolated = isolate_hugetlb(page_folio(page), pagelist); > + if (folio_test_hugetlb(folio)) { > + if (folio_test_large(folio)) { This makes no sense when you read it. All hugetlb folios are large, by definition. Think about what this code used to do, and what it should be changed to. > + isolated = isolate_hugetlb(folio, pagelist); > err = isolated ? 1 : -EBUSY; > } > } else { > - struct page *head; > - > - head = compound_head(page); > - isolated = isolate_lru_page(head); > + isolated = folio_isolate_lru(folio); > if (!isolated) { > err = -EBUSY; > - goto out_putpage; > + goto out_putfolio; > } > > err = 1; > - list_add_tail(&head->lru, pagelist); > - mod_node_page_state(page_pgdat(head), > - NR_ISOLATED_ANON + page_is_file_lru(head), > - thp_nr_pages(head)); > + list_add_tail(&folio->lru, pagelist); > + node_stat_mod_folio(folio, > + NR_ISOLATED_ANON + folio_is_file_lru(folio), > + folio_nr_pages(folio)); > }