Lines Matching refs:folio

83 		struct folio *folio = fbatch->folios[i];  in truncate_folio_batch_exceptionals()  local
86 if (!xa_is_value(folio)) { in truncate_folio_batch_exceptionals()
87 fbatch->folios[j++] = folio; in truncate_folio_batch_exceptionals()
96 __clear_shadow_entry(mapping, index, folio); in truncate_folio_batch_exceptionals()
153 void folio_invalidate(struct folio *folio, size_t offset, size_t length) in folio_invalidate() argument
155 const struct address_space_operations *aops = folio->mapping->a_ops; in folio_invalidate()
158 aops->invalidate_folio(folio, offset, length); in folio_invalidate()
172 static void truncate_cleanup_folio(struct folio *folio) in truncate_cleanup_folio() argument
174 if (folio_mapped(folio)) in truncate_cleanup_folio()
175 unmap_mapping_folio(folio); in truncate_cleanup_folio()
177 if (folio_needs_release(folio)) in truncate_cleanup_folio()
178 folio_invalidate(folio, 0, folio_size(folio)); in truncate_cleanup_folio()
185 folio_cancel_dirty(folio); in truncate_cleanup_folio()
186 folio_clear_mappedtodisk(folio); in truncate_cleanup_folio()
189 int truncate_inode_folio(struct address_space *mapping, struct folio *folio) in truncate_inode_folio() argument
191 if (folio->mapping != mapping) in truncate_inode_folio()
194 truncate_cleanup_folio(folio); in truncate_inode_folio()
195 filemap_remove_folio(folio); in truncate_inode_folio()
210 bool truncate_inode_partial_folio(struct folio *folio, loff_t start, loff_t end) in truncate_inode_partial_folio() argument
212 loff_t pos = folio_pos(folio); in truncate_inode_partial_folio()
219 length = folio_size(folio); in truncate_inode_partial_folio()
225 folio_wait_writeback(folio); in truncate_inode_partial_folio()
226 if (length == folio_size(folio)) { in truncate_inode_partial_folio()
227 truncate_inode_folio(folio->mapping, folio); in truncate_inode_partial_folio()
236 folio_zero_range(folio, offset, length); in truncate_inode_partial_folio()
238 if (folio_needs_release(folio)) in truncate_inode_partial_folio()
239 folio_invalidate(folio, offset, length); in truncate_inode_partial_folio()
240 if (!folio_test_large(folio)) in truncate_inode_partial_folio()
242 if (split_folio(folio) == 0) in truncate_inode_partial_folio()
244 if (folio_test_dirty(folio)) in truncate_inode_partial_folio()
246 truncate_inode_folio(folio->mapping, folio); in truncate_inode_partial_folio()
270 struct folio *folio) in mapping_evict_folio() argument
272 if (folio_test_dirty(folio) || folio_test_writeback(folio)) in mapping_evict_folio()
275 if (folio_ref_count(folio) > in mapping_evict_folio()
276 folio_nr_pages(folio) + folio_has_private(folio) + 1) in mapping_evict_folio()
278 if (!filemap_release_folio(folio, 0)) in mapping_evict_folio()
281 return remove_mapping(mapping, folio); in mapping_evict_folio()
296 struct folio *folio = page_folio(page); in invalidate_inode_page() local
297 struct address_space *mapping = folio_mapping(folio); in invalidate_inode_page()
302 return mapping_evict_folio(mapping, folio); in invalidate_inode_page()
338 struct folio *folio; in truncate_inode_pages_range() local
376 folio = __filemap_get_folio(mapping, lstart >> PAGE_SHIFT, FGP_LOCK, 0); in truncate_inode_pages_range()
377 if (!IS_ERR(folio)) { in truncate_inode_pages_range()
378 same_folio = lend < folio_pos(folio) + folio_size(folio); in truncate_inode_pages_range()
379 if (!truncate_inode_partial_folio(folio, lstart, lend)) { in truncate_inode_pages_range()
380 start = folio_next_index(folio); in truncate_inode_pages_range()
382 end = folio->index; in truncate_inode_pages_range()
384 folio_unlock(folio); in truncate_inode_pages_range()
385 folio_put(folio); in truncate_inode_pages_range()
386 folio = NULL; in truncate_inode_pages_range()
390 folio = __filemap_get_folio(mapping, lend >> PAGE_SHIFT, in truncate_inode_pages_range()
392 if (!IS_ERR(folio)) { in truncate_inode_pages_range()
393 if (!truncate_inode_partial_folio(folio, lstart, lend)) in truncate_inode_pages_range()
394 end = folio->index; in truncate_inode_pages_range()
395 folio_unlock(folio); in truncate_inode_pages_range()
396 folio_put(folio); in truncate_inode_pages_range()
414 struct folio *folio = fbatch.folios[i]; in truncate_inode_pages_range() local
418 if (xa_is_value(folio)) in truncate_inode_pages_range()
421 folio_lock(folio); in truncate_inode_pages_range()
422 VM_BUG_ON_FOLIO(!folio_contains(folio, indices[i]), folio); in truncate_inode_pages_range()
423 folio_wait_writeback(folio); in truncate_inode_pages_range()
424 truncate_inode_folio(mapping, folio); in truncate_inode_pages_range()
425 folio_unlock(folio); in truncate_inode_pages_range()
510 struct folio *folio = fbatch.folios[i]; in mapping_try_invalidate() local
514 if (xa_is_value(folio)) { in mapping_try_invalidate()
516 indices[i], folio); in mapping_try_invalidate()
520 ret = mapping_evict_folio(mapping, folio); in mapping_try_invalidate()
521 folio_unlock(folio); in mapping_try_invalidate()
527 deactivate_file_folio(folio); in mapping_try_invalidate()
570 struct folio *folio) in invalidate_complete_folio2() argument
572 if (folio->mapping != mapping) in invalidate_complete_folio2()
575 if (!filemap_release_folio(folio, GFP_KERNEL)) in invalidate_complete_folio2()
580 if (folio_test_dirty(folio)) in invalidate_complete_folio2()
583 BUG_ON(folio_has_private(folio)); in invalidate_complete_folio2()
584 __filemap_remove_folio(folio, NULL); in invalidate_complete_folio2()
590 filemap_free_folio(mapping, folio); in invalidate_complete_folio2()
598 static int folio_launder(struct address_space *mapping, struct folio *folio) in folio_launder() argument
600 if (!folio_test_dirty(folio)) in folio_launder()
602 if (folio->mapping != mapping || mapping->a_ops->launder_folio == NULL) in folio_launder()
604 return mapping->a_ops->launder_folio(folio); in folio_launder()
636 struct folio *folio = fbatch.folios[i]; in invalidate_inode_pages2_range() local
640 if (xa_is_value(folio)) { in invalidate_inode_pages2_range()
642 indices[i], folio)) in invalidate_inode_pages2_range()
647 if (!did_range_unmap && folio_mapped(folio)) { in invalidate_inode_pages2_range()
657 folio_lock(folio); in invalidate_inode_pages2_range()
658 if (unlikely(folio->mapping != mapping)) { in invalidate_inode_pages2_range()
659 folio_unlock(folio); in invalidate_inode_pages2_range()
662 VM_BUG_ON_FOLIO(!folio_contains(folio, indices[i]), folio); in invalidate_inode_pages2_range()
663 folio_wait_writeback(folio); in invalidate_inode_pages2_range()
665 if (folio_mapped(folio)) in invalidate_inode_pages2_range()
666 unmap_mapping_folio(folio); in invalidate_inode_pages2_range()
667 BUG_ON(folio_mapped(folio)); in invalidate_inode_pages2_range()
669 ret2 = folio_launder(mapping, folio); in invalidate_inode_pages2_range()
671 if (!invalidate_complete_folio2(mapping, folio)) in invalidate_inode_pages2_range()
676 folio_unlock(folio); in invalidate_inode_pages2_range()