1

mm: convert isolate_page() to mf_isolate_folio()

The only caller now has a folio, so pass it in and operate on it.  Saves
many page->folio conversions and introduces only one folio->page
conversion when calling isolate_movable_page().

Link: https://lkml.kernel.org/r/20231108182809.602073-6-willy@infradead.org
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Naoya Horiguchi <naoya.horiguchi@nec.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
Matthew Wilcox (Oracle) 2023-11-08 18:28:08 +00:00 committed by Andrew Morton
parent 049b26048d
commit 761d79fbad

View File

@ -2602,37 +2602,37 @@ unlock_mutex:
}
EXPORT_SYMBOL(unpoison_memory);
static bool isolate_page(struct page *page, struct list_head *pagelist)
static bool mf_isolate_folio(struct folio *folio, struct list_head *pagelist)
{
bool isolated = false;
if (PageHuge(page)) {
isolated = isolate_hugetlb(page_folio(page), pagelist);
if (folio_test_hugetlb(folio)) {
isolated = isolate_hugetlb(folio, pagelist);
} else {
bool lru = !__PageMovable(page);
bool lru = !__folio_test_movable(folio);
if (lru)
isolated = isolate_lru_page(page);
isolated = folio_isolate_lru(folio);
else
isolated = isolate_movable_page(page,
isolated = isolate_movable_page(&folio->page,
ISOLATE_UNEVICTABLE);
if (isolated) {
list_add(&page->lru, pagelist);
list_add(&folio->lru, pagelist);
if (lru)
inc_node_page_state(page, NR_ISOLATED_ANON +
page_is_file_lru(page));
node_stat_add_folio(folio, NR_ISOLATED_ANON +
folio_is_file_lru(folio));
}
}
/*
* If we succeed to isolate the page, we grabbed another refcount on
* the page, so we can safely drop the one we got from get_any_page().
* If we failed to isolate the page, it means that we cannot go further
* If we succeed to isolate the folio, we grabbed another refcount on
* the folio, so we can safely drop the one we got from get_any_page().
* If we failed to isolate the folio, it means that we cannot go further
* and we will return an error, so drop the reference we got from
* get_any_page() as well.
*/
put_page(page);
folio_put(folio);
return isolated;
}
@ -2686,7 +2686,7 @@ static int soft_offline_in_use_page(struct page *page)
return 0;
}
if (isolate_page(&folio->page, &pagelist)) {
if (mf_isolate_folio(folio, &pagelist)) {
ret = migrate_pages(&pagelist, alloc_migration_target, NULL,
(unsigned long)&mtc, MIGRATE_SYNC, MR_MEMORY_FAILURE, NULL);
if (!ret) {