File tree Expand file tree Collapse file tree 1 file changed +17
-8
lines changed Expand file tree Collapse file tree 1 file changed +17
-8
lines changed Original file line number Diff line number Diff line change @@ -2935,6 +2935,7 @@ static void split_huge_pages_all(void)
2935
2935
{
2936
2936
struct zone * zone ;
2937
2937
struct page * page ;
2938
+ struct folio * folio ;
2938
2939
unsigned long pfn , max_zone_pfn ;
2939
2940
unsigned long total = 0 , split = 0 ;
2940
2941
@@ -2947,24 +2948,32 @@ static void split_huge_pages_all(void)
2947
2948
int nr_pages ;
2948
2949
2949
2950
page = pfn_to_online_page (pfn );
2950
- if (!page || !get_page_unless_zero (page ))
2951
+ if (!page || PageTail (page ))
2952
+ continue ;
2953
+ folio = page_folio (page );
2954
+ if (!folio_try_get (folio ))
2951
2955
continue ;
2952
2956
2953
- if (zone != page_zone (page ))
2957
+ if (unlikely (page_folio (page ) != folio ))
2958
+ goto next ;
2959
+
2960
+ if (zone != folio_zone (folio ))
2954
2961
goto next ;
2955
2962
2956
- if (!PageHead (page ) || PageHuge (page ) || !PageLRU (page ))
2963
+ if (!folio_test_large (folio )
2964
+ || folio_test_hugetlb (folio )
2965
+ || !folio_test_lru (folio ))
2957
2966
goto next ;
2958
2967
2959
2968
total ++ ;
2960
- lock_page ( page );
2961
- nr_pages = thp_nr_pages ( page );
2962
- if (!split_huge_page ( page ))
2969
+ folio_lock ( folio );
2970
+ nr_pages = folio_nr_pages ( folio );
2971
+ if (!split_folio ( folio ))
2963
2972
split ++ ;
2964
2973
pfn += nr_pages - 1 ;
2965
- unlock_page ( page );
2974
+ folio_unlock ( folio );
2966
2975
next :
2967
- put_page ( page );
2976
+ folio_put ( folio );
2968
2977
cond_resched ();
2969
2978
}
2970
2979
}
You can’t perform that action at this time.
0 commit comments