@@ -2645,48 +2645,48 @@ static int soft_offline_in_use_page(struct page *page)
2645
2645
{
2646
2646
long ret = 0 ;
2647
2647
unsigned long pfn = page_to_pfn (page );
2648
- struct page * hpage = compound_head (page );
2648
+ struct folio * folio = page_folio (page );
2649
2649
char const * msg_page [] = {"page" , "hugepage" };
2650
- bool huge = PageHuge ( page );
2650
+ bool huge = folio_test_hugetlb ( folio );
2651
2651
LIST_HEAD (pagelist );
2652
2652
struct migration_target_control mtc = {
2653
2653
.nid = NUMA_NO_NODE ,
2654
2654
.gfp_mask = GFP_USER | __GFP_MOVABLE | __GFP_RETRY_MAYFAIL ,
2655
2655
};
2656
2656
2657
- if (!huge && PageTransHuge ( hpage )) {
2657
+ if (!huge && folio_test_large ( folio )) {
2658
2658
if (try_to_split_thp_page (page )) {
2659
2659
pr_info ("soft offline: %#lx: thp split failed\n" , pfn );
2660
2660
return - EBUSY ;
2661
2661
}
2662
- hpage = page ;
2662
+ folio = page_folio ( page ) ;
2663
2663
}
2664
2664
2665
- lock_page ( page );
2665
+ folio_lock ( folio );
2666
2666
if (!huge )
2667
- wait_on_page_writeback ( page );
2667
+ folio_wait_writeback ( folio );
2668
2668
if (PageHWPoison (page )) {
2669
- unlock_page ( page );
2670
- put_page ( page );
2669
+ folio_unlock ( folio );
2670
+ folio_put ( folio );
2671
2671
pr_info ("soft offline: %#lx page already poisoned\n" , pfn );
2672
2672
return 0 ;
2673
2673
}
2674
2674
2675
- if (!huge && PageLRU ( page ) && !PageSwapCache ( page ))
2675
+ if (!huge && folio_test_lru ( folio ) && !folio_test_swapcache ( folio ))
2676
2676
/*
2677
2677
* Try to invalidate first. This should work for
2678
2678
* non dirty unmapped page cache pages.
2679
2679
*/
2680
- ret = invalidate_inode_page ( page );
2681
- unlock_page ( page );
2680
+ ret = mapping_evict_folio ( folio_mapping ( folio ), folio );
2681
+ folio_unlock ( folio );
2682
2682
2683
2683
if (ret ) {
2684
2684
pr_info ("soft_offline: %#lx: invalidated\n" , pfn );
2685
2685
page_handle_poison (page , false, true);
2686
2686
return 0 ;
2687
2687
}
2688
2688
2689
- if (isolate_page (hpage , & pagelist )) {
2689
+ if (isolate_page (& folio -> page , & pagelist )) {
2690
2690
ret = migrate_pages (& pagelist , alloc_migration_target , NULL ,
2691
2691
(unsigned long )& mtc , MIGRATE_SYNC , MR_MEMORY_FAILURE , NULL );
2692
2692
if (!ret ) {
0 commit comments