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:
parent
049b26048d
commit
761d79fbad
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user