mirror of
				https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux
				synced 2025-11-01 02:22:17 +10:00 
			
		
		
		
	mm: convert free_swap_cache() to take a folio
All but one caller already has a folio, so convert free_page_and_swap_cache() to have a folio and remove the call to page_folio(). Link: https://lkml.kernel.org/r/20240227174254.710559-19-willy@infradead.org Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Ryan Roberts <ryan.roberts@arm.com> Reviewed-by: David Hildenbrand <david@redhat.com> Cc: Mel Gorman <mgorman@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									d4111eecdc
								
							
						
					
					
						commit
						63b774993d
					
				| @ -447,9 +447,9 @@ static inline unsigned long total_swapcache_pages(void) | ||||
| 	return global_node_page_state(NR_SWAPCACHE); | ||||
| } | ||||
| 
 | ||||
| extern void free_swap_cache(struct page *page); | ||||
| extern void free_page_and_swap_cache(struct page *); | ||||
| extern void free_pages_and_swap_cache(struct encoded_page **, int); | ||||
| void free_swap_cache(struct folio *folio); | ||||
| void free_page_and_swap_cache(struct page *); | ||||
| void free_pages_and_swap_cache(struct encoded_page **, int); | ||||
| /* linux/mm/swapfile.c */ | ||||
| extern atomic_long_t nr_swap_pages; | ||||
| extern long total_swap_pages; | ||||
| @ -531,7 +531,7 @@ static inline void put_swap_device(struct swap_info_struct *si) | ||||
| /* used to sanity check ptes in zap_pte_range when CONFIG_SWAP=0 */ | ||||
| #define free_swap_and_cache(e) is_pfn_swap_entry(e) | ||||
| 
 | ||||
| static inline void free_swap_cache(struct page *page) | ||||
| static inline void free_swap_cache(struct folio *folio) | ||||
| { | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -731,7 +731,7 @@ static void __collapse_huge_page_copy_succeeded(pte_t *pte, | ||||
| 		node_stat_sub_folio(src, NR_ISOLATED_ANON + | ||||
| 				folio_is_file_lru(src)); | ||||
| 		folio_unlock(src); | ||||
| 		free_swap_cache(&src->page); | ||||
| 		free_swap_cache(src); | ||||
| 		folio_putback_lru(src); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @ -3452,7 +3452,7 @@ static vm_fault_t wp_page_copy(struct vm_fault *vmf) | ||||
| 		folio_put(new_folio); | ||||
| 	if (old_folio) { | ||||
| 		if (page_copied) | ||||
| 			free_swap_cache(&old_folio->page); | ||||
| 			free_swap_cache(old_folio); | ||||
| 		folio_put(old_folio); | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
| @ -283,10 +283,8 @@ void clear_shadow_from_swap_cache(int type, unsigned long begin, | ||||
|  * folio_free_swap() _with_ the lock. | ||||
|  * 					- Marcelo | ||||
|  */ | ||||
| void free_swap_cache(struct page *page) | ||||
| void free_swap_cache(struct folio *folio) | ||||
| { | ||||
| 	struct folio *folio = page_folio(page); | ||||
| 
 | ||||
| 	if (folio_test_swapcache(folio) && !folio_mapped(folio) && | ||||
| 	    folio_trylock(folio)) { | ||||
| 		folio_free_swap(folio); | ||||
| @ -300,9 +298,11 @@ void free_swap_cache(struct page *page) | ||||
|  */ | ||||
| void free_page_and_swap_cache(struct page *page) | ||||
| { | ||||
| 	free_swap_cache(page); | ||||
| 	struct folio *folio = page_folio(page); | ||||
| 
 | ||||
| 	free_swap_cache(folio); | ||||
| 	if (!is_huge_zero_page(page)) | ||||
| 		put_page(page); | ||||
| 		folio_put(folio); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
| @ -319,7 +319,7 @@ void free_pages_and_swap_cache(struct encoded_page **pages, int nr) | ||||
| 	for (int i = 0; i < nr; i++) { | ||||
| 		struct folio *folio = page_folio(encoded_page_ptr(pages[i])); | ||||
| 
 | ||||
| 		free_swap_cache(&folio->page); | ||||
| 		free_swap_cache(folio); | ||||
| 		refs[folios.nr] = 1; | ||||
| 		if (unlikely(encoded_page_flags(pages[i]) & | ||||
| 			     ENCODED_PAGE_BIT_NR_PAGES_NEXT)) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user