The patch titled Subject: mm: remove isolate_lru_page() has been added to the -mm mm-unstable branch. Its filename is mm-remove-isolate_lru_page.patch This patch will shortly appear at https://git.kernel.org/pub/scm/linux/kernel/git/akpm/25-new.git/tree/patches/mm-remove-isolate_lru_page.patch This patch will later appear in the mm-unstable branch at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next via the mm-everything branch at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm and is updated there every 2-3 working days ------------------------------------------------------ From: Kefeng Wang <wangkefeng.wang@xxxxxxxxxx> Subject: mm: remove isolate_lru_page() Date: Mon, 26 Aug 2024 14:58:13 +0800 There are no more callers of isolate_lru_page(), remove it. Link: https://lkml.kernel.org/r/20240826065814.1336616-6-wangkefeng.wang@xxxxxxxxxx Signed-off-by: Kefeng Wang <wangkefeng.wang@xxxxxxxxxx> Reviewed-by: Vishal Moola (Oracle) <vishal.moola@xxxxxxxxx> Cc: Alistair Popple <apopple@xxxxxxxxxx> Cc: Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx> Cc: David Hildenbrand <david@xxxxxxxxxx> Cc: Jonathan Corbet <corbet@xxxxxxx> Cc: Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx> Cc: Zi Yan <ziy@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- Documentation/mm/page_migration.rst | 6 +++--- Documentation/mm/unevictable-lru.rst | 2 +- Documentation/translations/zh_CN/mm/page_migration.rst | 6 +++--- mm/filemap.c | 2 +- mm/folio-compat.c | 7 ------- mm/internal.h | 1 - mm/khugepaged.c | 6 +++--- mm/migrate_device.c | 2 +- mm/swap.c | 2 +- 9 files changed, 13 insertions(+), 21 deletions(-) --- a/Documentation/mm/page_migration.rst~mm-remove-isolate_lru_page +++ a/Documentation/mm/page_migration.rst @@ -67,8 +67,8 @@ In kernel use of migrate_pages() Lists of pages to be migrated are generated by scanning over pages and moving them into lists. This is done by - calling isolate_lru_page(). - Calling isolate_lru_page() increases the references to the page + calling folio_isolate_lru(). + Calling folio_isolate_lru() increases the references to the page so that it cannot vanish while the page migration occurs. It also prevents the swapper or other scans from encountering the page. @@ -86,7 +86,7 @@ How migrate_pages() works migrate_pages() does several passes over its list of pages. A page is moved if all references to a page are removable at the time. The page has -already been removed from the LRU via isolate_lru_page() and the refcount +already been removed from the LRU via folio_isolate_lru() and the refcount is increased so that the page cannot be freed while page migration occurs. Steps: --- a/Documentation/mm/unevictable-lru.rst~mm-remove-isolate_lru_page +++ a/Documentation/mm/unevictable-lru.rst @@ -230,7 +230,7 @@ In Nick's patch, he used one of the stru of VM_LOCKED VMAs that map the page (Rik van Riel had the same idea three years earlier). But this use of the link field for a count prevented the management of the pages on an LRU list, and thus mlocked pages were not migratable as -isolate_lru_page() could not detect them, and the LRU list link field was not +folio_isolate_lru() could not detect them, and the LRU list link field was not available to the migration subsystem. Nick resolved this by putting mlocked pages back on the LRU list before --- a/Documentation/translations/zh_CN/mm/page_migration.rst~mm-remove-isolate_lru_page +++ a/Documentation/translations/zh_CN/mm/page_migration.rst @@ -50,8 +50,8 @@ å?¨å??æ ¸ä¸ä½¿ç?¨ migrate_pages() 1. ä»?LRUä¸ç§»é?¤é¡µé?¢ã?? - è¦?è¿?移ç??页é?¢å??表æ?¯é??è¿?æ?«æ??页é?¢å¹¶æ??å®?们移å?°å??表ä¸æ?¥ç??æ??ç??ã??è¿?æ?¯é??è¿?è°?ç?¨ isolate_lru_page() - æ?¥å®?æ??ç??ã??è°?ç?¨isolate_lru_page()å¢?å? äº?对该页ç??å¼?ç?¨ï¼?è¿?æ ·å?¨é¡µé?¢è¿?移å??ç??æ?¶å®?å°±ä¸?ä¼? + è¦?è¿?移ç??页é?¢å??表æ?¯é??è¿?æ?«æ??页é?¢å¹¶æ??å®?们移å?°å??表ä¸æ?¥ç??æ??ç??ã??è¿?æ?¯é??è¿?è°?ç?¨ folio_isolate_lru() + æ?¥å®?æ??ç??ã??è°?ç?¨folio_isolate_lru()å¢?å? äº?对该页ç??å¼?ç?¨ï¼?è¿?æ ·å?¨é¡µé?¢è¿?移å??ç??æ?¶å®?å°±ä¸?ä¼? æ¶?失ã??å®?è¿?å?¯ä»¥é?²æ¢äº¤æ?¢å?¨æ??å?¶ä»?æ?«æ??å?¨é??å?°è¯¥é¡µã?? @@ -65,7 +65,7 @@ migrate_pages()å¦?ä½?å·¥ä½? ======================= migrate_pages()对å®?ç??页é?¢å??表è¿?è¡?äº?å¤?次å¤?ç??ã??å¦?æ??å½?æ?¶å¯¹ä¸?个页é?¢ç??æ??æ??å¼?ç?¨é?½å?¯ä»¥è¢«ç§»é?¤ï¼? -é?£ä¹?è¿?个页é?¢å°±ä¼?被移å?¨ã??该页已ç»?é??è¿?isolate_lru_page()ä»?LRUä¸ç§»é?¤ï¼?并ä¸?refcount被 +é?£ä¹?è¿?个页é?¢å°±ä¼?被移å?¨ã??该页已ç»?é??è¿?folio_isolate_lru()ä»?LRUä¸ç§»é?¤ï¼?并ä¸?refcount被 å¢?å? ï¼?以便å?¨é¡µé?¢è¿?移å??ç??æ?¶ä¸?é??æ?¾è¯¥é¡µã?? æ¥éª¤: --- a/mm/filemap.c~mm-remove-isolate_lru_page +++ a/mm/filemap.c @@ -114,7 +114,7 @@ * ->private_lock (try_to_unmap_one) * ->i_pages lock (try_to_unmap_one) * ->lruvec->lru_lock (follow_page_mask->mark_page_accessed) - * ->lruvec->lru_lock (check_pte_range->isolate_lru_page) + * ->lruvec->lru_lock (check_pte_range->folio_isolate_lru) * ->private_lock (folio_remove_rmap_pte->set_page_dirty) * ->i_pages lock (folio_remove_rmap_pte->set_page_dirty) * bdi.wb->list_lock (folio_remove_rmap_pte->set_page_dirty) --- a/mm/folio-compat.c~mm-remove-isolate_lru_page +++ a/mm/folio-compat.c @@ -93,13 +93,6 @@ struct page *grab_cache_page_write_begin } EXPORT_SYMBOL(grab_cache_page_write_begin); -bool isolate_lru_page(struct page *page) -{ - if (WARN_RATELIMIT(PageTail(page), "trying to isolate tail page")) - return false; - return folio_isolate_lru((struct folio *)page); -} - void putback_lru_page(struct page *page) { folio_putback_lru(page_folio(page)); --- a/mm/internal.h~mm-remove-isolate_lru_page +++ a/mm/internal.h @@ -416,7 +416,6 @@ extern unsigned long highest_memmap_pfn; /* * in mm/vmscan.c: */ -bool isolate_lru_page(struct page *page); bool folio_isolate_lru(struct folio *folio); void putback_lru_page(struct page *page); void folio_putback_lru(struct folio *folio); --- a/mm/khugepaged.c~mm-remove-isolate_lru_page +++ a/mm/khugepaged.c @@ -627,7 +627,7 @@ static int __collapse_huge_page_isolate( } /* - * We can do it before isolate_lru_page because the + * We can do it before folio_isolate_lru because the * page can't be freed from under us. NOTE: PG_lock * is needed to serialize against split_huge_page * when invoked from the VM. @@ -1874,7 +1874,7 @@ static int collapse_file(struct mm_struc result = SCAN_FAIL; goto xa_unlocked; } - /* drain lru cache to help isolate_lru_page() */ + /* drain lru cache to help folio_isolate_lru() */ lru_add_drain(); } else if (folio_trylock(folio)) { folio_get(folio); @@ -1889,7 +1889,7 @@ static int collapse_file(struct mm_struc page_cache_sync_readahead(mapping, &file->f_ra, file, index, end - index); - /* drain lru cache to help isolate_lru_page() */ + /* drain lru cache to help folio_isolate_lru() */ lru_add_drain(); folio = filemap_lock_folio(mapping, index); if (IS_ERR(folio)) { --- a/mm/migrate_device.c~mm-remove-isolate_lru_page +++ a/mm/migrate_device.c @@ -328,7 +328,7 @@ static bool migrate_vma_check_page(struc /* * One extra ref because caller holds an extra reference, either from - * isolate_lru_page() for a regular page, or migrate_vma_collect() for + * folio_isolate_lru() for a regular page, or migrate_vma_collect() for * a device page. */ int extra = 1 + (page == fault_page); --- a/mm/swap.c~mm-remove-isolate_lru_page +++ a/mm/swap.c @@ -906,7 +906,7 @@ atomic_t lru_disable_count = ATOMIC_INIT /* * lru_cache_disable() needs to be called before we start compiling - * a list of pages to be migrated using isolate_lru_page(). + * a list of pages to be migrated using folio_isolate_lru(). * It drains pages on LRU cache and then disable on all cpus until * lru_cache_enable is called. * _ Patches currently in -mm which might be from wangkefeng.wang@xxxxxxxxxx are mm-hugetlb-remove-left-over-comment-about-follow_huge_foo.patch mm-remove-migration-for-hugepage-in-isolate_single_pageblock.patch mm-memory_hotplug-remove-head-variable-in-do_migrate_range.patch mm-memory-failure-add-unmap_poisoned_folio.patch mm-memory_hotplug-check-hwpoisoned-page-firstly-in-do_migrate_range.patch mm-migrate-add-isolate_folio_to_list.patch mm-memory_hotplug-unify-huge-lru-non-lru-movable-folio-isolation.patch mm-migrate_device-convert-to-migrate_device_coherent_folio.patch mm-migrate_device-use-a-folio-in-migrate_device_range.patch mm-migrate_device-use-more-folio-in-migrate_device_unmap.patch mm-migrate_device-use-more-folio-in-migrate_device_finalize.patch mm-remove-isolate_lru_page.patch mm-remove-isolate_lru_page-fix.patch mm-remove-putback_lru_page.patch