Commit 761d79fb authored by Matthew Wilcox (Oracle)'s avatar Matthew Wilcox (Oracle) Committed by Andrew Morton

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.orgSigned-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Cc: Naoya Horiguchi <naoya.horiguchi@nec.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 049b2604
...@@ -2602,37 +2602,37 @@ int unpoison_memory(unsigned long pfn) ...@@ -2602,37 +2602,37 @@ int unpoison_memory(unsigned long pfn)
} }
EXPORT_SYMBOL(unpoison_memory); 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; bool isolated = false;
if (PageHuge(page)) { if (folio_test_hugetlb(folio)) {
isolated = isolate_hugetlb(page_folio(page), pagelist); isolated = isolate_hugetlb(folio, pagelist);
} else { } else {
bool lru = !__PageMovable(page); bool lru = !__folio_test_movable(folio);
if (lru) if (lru)
isolated = isolate_lru_page(page); isolated = folio_isolate_lru(folio);
else else
isolated = isolate_movable_page(page, isolated = isolate_movable_page(&folio->page,
ISOLATE_UNEVICTABLE); ISOLATE_UNEVICTABLE);
if (isolated) { if (isolated) {
list_add(&page->lru, pagelist); list_add(&folio->lru, pagelist);
if (lru) if (lru)
inc_node_page_state(page, NR_ISOLATED_ANON + node_stat_add_folio(folio, NR_ISOLATED_ANON +
page_is_file_lru(page)); folio_is_file_lru(folio));
} }
} }
/* /*
* If we succeed to isolate the page, we grabbed another refcount on * If we succeed to isolate the folio, we grabbed another refcount on
* the page, so we can safely drop the one we got from get_any_page(). * the folio, 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 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 * and we will return an error, so drop the reference we got from
* get_any_page() as well. * get_any_page() as well.
*/ */
put_page(page); folio_put(folio);
return isolated; return isolated;
} }
...@@ -2686,7 +2686,7 @@ static int soft_offline_in_use_page(struct page *page) ...@@ -2686,7 +2686,7 @@ static int soft_offline_in_use_page(struct page *page)
return 0; return 0;
} }
if (isolate_page(&folio->page, &pagelist)) { if (mf_isolate_folio(folio, &pagelist)) {
ret = migrate_pages(&pagelist, alloc_migration_target, NULL, ret = migrate_pages(&pagelist, alloc_migration_target, NULL,
(unsigned long)&mtc, MIGRATE_SYNC, MR_MEMORY_FAILURE, NULL); (unsigned long)&mtc, MIGRATE_SYNC, MR_MEMORY_FAILURE, NULL);
if (!ret) { if (!ret) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment