Lines Matching refs:folio
88 int add_to_swap_cache(struct folio *folio, swp_entry_t entry, in add_to_swap_cache() argument
93 XA_STATE_ORDER(xas, &address_space->i_pages, idx, folio_order(folio)); in add_to_swap_cache()
94 unsigned long i, nr = folio_nr_pages(folio); in add_to_swap_cache()
99 VM_BUG_ON_FOLIO(!folio_test_locked(folio), folio); in add_to_swap_cache()
100 VM_BUG_ON_FOLIO(folio_test_swapcache(folio), folio); in add_to_swap_cache()
101 VM_BUG_ON_FOLIO(!folio_test_swapbacked(folio), folio); in add_to_swap_cache()
103 folio_ref_add(folio, nr); in add_to_swap_cache()
104 folio_set_swapcache(folio); in add_to_swap_cache()
112 VM_BUG_ON_FOLIO(xas.xa_index != idx + i, folio); in add_to_swap_cache()
118 set_page_private(folio_page(folio, i), entry.val + i); in add_to_swap_cache()
119 xas_store(&xas, folio); in add_to_swap_cache()
123 __node_stat_mod_folio(folio, NR_FILE_PAGES, nr); in add_to_swap_cache()
124 __lruvec_stat_mod_folio(folio, NR_SWAPCACHE, nr); in add_to_swap_cache()
132 folio_clear_swapcache(folio); in add_to_swap_cache()
133 folio_ref_sub(folio, nr); in add_to_swap_cache()
141 void __delete_from_swap_cache(struct folio *folio, in __delete_from_swap_cache() argument
146 long nr = folio_nr_pages(folio); in __delete_from_swap_cache()
152 VM_BUG_ON_FOLIO(!folio_test_locked(folio), folio); in __delete_from_swap_cache()
153 VM_BUG_ON_FOLIO(!folio_test_swapcache(folio), folio); in __delete_from_swap_cache()
154 VM_BUG_ON_FOLIO(folio_test_writeback(folio), folio); in __delete_from_swap_cache()
158 VM_BUG_ON_PAGE(entry != folio, entry); in __delete_from_swap_cache()
159 set_page_private(folio_page(folio, i), 0); in __delete_from_swap_cache()
162 folio_clear_swapcache(folio); in __delete_from_swap_cache()
164 __node_stat_mod_folio(folio, NR_FILE_PAGES, -nr); in __delete_from_swap_cache()
165 __lruvec_stat_mod_folio(folio, NR_SWAPCACHE, -nr); in __delete_from_swap_cache()
178 bool add_to_swap(struct folio *folio) in add_to_swap() argument
183 VM_BUG_ON_FOLIO(!folio_test_locked(folio), folio); in add_to_swap()
184 VM_BUG_ON_FOLIO(!folio_test_uptodate(folio), folio); in add_to_swap()
186 entry = folio_alloc_swap(folio); in add_to_swap()
201 err = add_to_swap_cache(folio, entry, in add_to_swap()
220 folio_mark_dirty(folio); in add_to_swap()
225 put_swap_folio(folio, entry); in add_to_swap()
235 void delete_from_swap_cache(struct folio *folio) in delete_from_swap_cache() argument
237 swp_entry_t entry = folio_swap_entry(folio); in delete_from_swap_cache()
241 __delete_from_swap_cache(folio, entry, NULL); in delete_from_swap_cache()
244 put_swap_folio(folio, entry); in delete_from_swap_cache()
245 folio_ref_sub(folio, folio_nr_pages(folio)); in delete_from_swap_cache()
288 struct folio *folio = page_folio(page); in free_swap_cache() local
290 if (folio_test_swapcache(folio) && !folio_mapped(folio) && in free_swap_cache()
291 folio_trylock(folio)) { in free_swap_cache()
292 folio_free_swap(folio); in free_swap_cache()
293 folio_unlock(folio); in free_swap_cache()
333 struct folio *swap_cache_get_folio(swp_entry_t entry, in swap_cache_get_folio()
336 struct folio *folio; in swap_cache_get_folio() local
338 folio = filemap_get_folio(swap_address_space(entry), swp_offset(entry)); in swap_cache_get_folio()
339 if (folio) { in swap_cache_get_folio()
347 if (unlikely(folio_test_large(folio))) in swap_cache_get_folio()
348 return folio; in swap_cache_get_folio()
350 readahead = folio_test_clear_readahead(folio); in swap_cache_get_folio()
371 return folio; in swap_cache_get_folio()
384 struct folio *filemap_get_incore_folio(struct address_space *mapping, in filemap_get_incore_folio()
389 struct folio *folio = __filemap_get_folio(mapping, index, FGP_ENTRY, 0); in filemap_get_incore_folio() local
391 if (!xa_is_value(folio)) in filemap_get_incore_folio()
396 swp = radix_to_swp_entry(folio); in filemap_get_incore_folio()
405 folio = filemap_get_folio(swap_address_space(swp), index); in filemap_get_incore_folio()
408 return folio; in filemap_get_incore_folio()
416 struct folio *folio; in __read_swap_cache_async() local
431 folio = filemap_get_folio(swap_address_space(entry), in __read_swap_cache_async()
434 if (folio) in __read_swap_cache_async()
435 return folio_file_page(folio, swp_offset(entry)); in __read_swap_cache_async()
453 folio = vma_alloc_folio(gfp_mask, 0, vma, addr, false); in __read_swap_cache_async()
454 if (!folio) in __read_swap_cache_async()
464 folio_put(folio); in __read_swap_cache_async()
482 __folio_set_locked(folio); in __read_swap_cache_async()
483 __folio_set_swapbacked(folio); in __read_swap_cache_async()
485 if (mem_cgroup_swapin_charge_folio(folio, NULL, gfp_mask, entry)) in __read_swap_cache_async()
489 if (add_to_swap_cache(folio, entry, gfp_mask & GFP_RECLAIM_MASK, &shadow)) in __read_swap_cache_async()
495 workingset_refault(folio, shadow); in __read_swap_cache_async()
498 folio_add_lru(folio); in __read_swap_cache_async()
500 return &folio->page; in __read_swap_cache_async()
503 put_swap_folio(folio, entry); in __read_swap_cache_async()
504 folio_unlock(folio); in __read_swap_cache_async()
505 folio_put(folio); in __read_swap_cache_async()