Lines Matching refs:folio

30 bool afs_dirty_folio(struct address_space *mapping, struct folio *folio)  in afs_dirty_folio()  argument
32 return fscache_dirty_folio(mapping, folio, in afs_dirty_folio()
35 static void afs_folio_start_fscache(bool caching, struct folio *folio) in afs_folio_start_fscache() argument
38 folio_start_fscache(folio); in afs_folio_start_fscache()
41 static void afs_folio_start_fscache(bool caching, struct folio *folio) in afs_folio_start_fscache() argument
51 struct folio *folio) in afs_flush_conflicting_write() argument
56 .range_start = folio_pos(folio), in afs_flush_conflicting_write()
61 return afs_writepages_region(mapping, &wbc, folio_pos(folio), LLONG_MAX, in afs_flush_conflicting_write()
73 struct folio *folio; in afs_write_begin() local
87 ret = netfs_write_begin(&vnode->netfs, file, mapping, pos, len, &folio, fsdata); in afs_write_begin()
91 index = folio_index(folio); in afs_write_begin()
99 if (folio_test_private(folio)) { in afs_write_begin()
100 priv = (unsigned long)folio_get_private(folio); in afs_write_begin()
101 f = afs_folio_dirty_from(folio, priv); in afs_write_begin()
102 t = afs_folio_dirty_to(folio, priv); in afs_write_begin()
105 if (folio_test_writeback(folio)) { in afs_write_begin()
106 trace_afs_folio_dirty(vnode, tracepoint_string("alrdy"), folio); in afs_write_begin()
107 folio_unlock(folio); in afs_write_begin()
119 *_page = folio_file_page(folio, pos / PAGE_SIZE); in afs_write_begin()
127 trace_afs_folio_dirty(vnode, tracepoint_string("confl"), folio); in afs_write_begin()
128 folio_unlock(folio); in afs_write_begin()
130 ret = afs_flush_conflicting_write(mapping, folio); in afs_write_begin()
135 ret = folio_wait_writeback_killable(folio); in afs_write_begin()
139 ret = folio_lock_killable(folio); in afs_write_begin()
145 folio_put(folio); in afs_write_begin()
157 struct folio *folio = page_folio(subpage); in afs_write_end() local
160 unsigned int f, from = offset_in_folio(folio, pos); in afs_write_end()
165 vnode->fid.vid, vnode->fid.vnode, folio_index(folio)); in afs_write_end()
167 if (!folio_test_uptodate(folio)) { in afs_write_end()
173 folio_mark_uptodate(folio); in afs_write_end()
191 if (folio_test_private(folio)) { in afs_write_end()
192 priv = (unsigned long)folio_get_private(folio); in afs_write_end()
193 f = afs_folio_dirty_from(folio, priv); in afs_write_end()
194 t = afs_folio_dirty_to(folio, priv); in afs_write_end()
199 priv = afs_folio_dirty(folio, f, t); in afs_write_end()
200 folio_change_private(folio, (void *)priv); in afs_write_end()
201 trace_afs_folio_dirty(vnode, tracepoint_string("dirty+"), folio); in afs_write_end()
203 priv = afs_folio_dirty(folio, from, to); in afs_write_end()
204 folio_attach_private(folio, (void *)priv); in afs_write_end()
205 trace_afs_folio_dirty(vnode, tracepoint_string("dirty"), folio); in afs_write_end()
208 if (folio_mark_dirty(folio)) in afs_write_end()
209 _debug("dirtied %lx", folio_index(folio)); in afs_write_end()
212 folio_unlock(folio); in afs_write_end()
213 folio_put(folio); in afs_write_end()
224 struct folio *folio; in afs_kill_pages() local
234 folio = filemap_get_folio(mapping, index); in afs_kill_pages()
235 if (IS_ERR(folio)) { in afs_kill_pages()
240 next = folio_next_index(folio); in afs_kill_pages()
242 folio_clear_uptodate(folio); in afs_kill_pages()
243 folio_end_writeback(folio); in afs_kill_pages()
244 folio_lock(folio); in afs_kill_pages()
245 generic_error_remove_page(mapping, &folio->page); in afs_kill_pages()
246 folio_unlock(folio); in afs_kill_pages()
247 folio_put(folio); in afs_kill_pages()
262 struct folio *folio; in afs_redirty_pages() local
272 folio = filemap_get_folio(mapping, index); in afs_redirty_pages()
273 if (IS_ERR(folio)) { in afs_redirty_pages()
278 next = index + folio_nr_pages(folio); in afs_redirty_pages()
279 folio_redirty_for_writepage(wbc, folio); in afs_redirty_pages()
280 folio_end_writeback(folio); in afs_redirty_pages()
281 folio_put(folio); in afs_redirty_pages()
293 struct folio *folio; in afs_pages_written_back() local
304 xas_for_each(&xas, folio, end) { in afs_pages_written_back()
305 if (!folio_test_writeback(folio)) { in afs_pages_written_back()
307 len, start, folio_index(folio), end); in afs_pages_written_back()
308 ASSERT(folio_test_writeback(folio)); in afs_pages_written_back()
311 trace_afs_folio_dirty(vnode, tracepoint_string("clear"), folio); in afs_pages_written_back()
312 folio_detach_private(folio); in afs_pages_written_back()
313 folio_end_writeback(folio); in afs_pages_written_back()
471 struct folio *folio; in afs_extend_writeback() local
490 xas_for_each(&xas, folio, ULONG_MAX) { in afs_extend_writeback()
492 if (xas_retry(&xas, folio)) in afs_extend_writeback()
494 if (xa_is_value(folio)) in afs_extend_writeback()
496 if (folio_index(folio) != index) in afs_extend_writeback()
499 if (!folio_try_get(folio)) { in afs_extend_writeback()
505 if (unlikely(folio != xas_reload(&xas))) { in afs_extend_writeback()
506 folio_put(folio); in afs_extend_writeback()
510 if (!folio_trylock(folio)) { in afs_extend_writeback()
511 folio_put(folio); in afs_extend_writeback()
514 if (!folio_test_dirty(folio) || in afs_extend_writeback()
515 folio_test_writeback(folio) || in afs_extend_writeback()
516 folio_test_fscache(folio)) { in afs_extend_writeback()
517 folio_unlock(folio); in afs_extend_writeback()
518 folio_put(folio); in afs_extend_writeback()
522 psize = folio_size(folio); in afs_extend_writeback()
523 priv = (unsigned long)folio_get_private(folio); in afs_extend_writeback()
524 f = afs_folio_dirty_from(folio, priv); in afs_extend_writeback()
525 t = afs_folio_dirty_to(folio, priv); in afs_extend_writeback()
527 folio_unlock(folio); in afs_extend_writeback()
528 folio_put(folio); in afs_extend_writeback()
539 index += folio_nr_pages(folio); in afs_extend_writeback()
540 if (!folio_batch_add(&fbatch, folio)) in afs_extend_writeback()
557 folio = fbatch.folios[i]; in afs_extend_writeback()
558 trace_afs_folio_dirty(vnode, tracepoint_string("store+"), folio); in afs_extend_writeback()
560 if (!folio_clear_dirty_for_io(folio)) in afs_extend_writeback()
562 if (folio_start_writeback(folio)) in afs_extend_writeback()
564 afs_folio_start_fscache(caching, folio); in afs_extend_writeback()
566 *_count -= folio_nr_pages(folio); in afs_extend_writeback()
567 folio_unlock(folio); in afs_extend_writeback()
583 struct folio *folio, in afs_write_back_from_locked_folio() argument
596 _enter(",%lx,%llx-%llx", folio_index(folio), start, end); in afs_write_back_from_locked_folio()
598 if (folio_start_writeback(folio)) in afs_write_back_from_locked_folio()
600 afs_folio_start_fscache(caching, folio); in afs_write_back_from_locked_folio()
602 count -= folio_nr_pages(folio); in afs_write_back_from_locked_folio()
609 priv = (unsigned long)folio_get_private(folio); in afs_write_back_from_locked_folio()
610 offset = afs_folio_dirty_from(folio, priv); in afs_write_back_from_locked_folio()
611 to = afs_folio_dirty_to(folio, priv); in afs_write_back_from_locked_folio()
612 trace_afs_folio_dirty(vnode, tracepoint_string("store"), folio); in afs_write_back_from_locked_folio()
625 (to == folio_size(folio) || new_content)) in afs_write_back_from_locked_folio()
636 folio_unlock(folio); in afs_write_back_from_locked_folio()
708 struct folio *folio; in afs_writepages_region() local
726 folio = fbatch.folios[i]; in afs_writepages_region()
727 start = folio_pos(folio); /* May regress with THPs */ in afs_writepages_region()
729 _debug("wback %lx", folio_index(folio)); in afs_writepages_region()
738 ret = folio_lock_killable(folio); in afs_writepages_region()
744 if (!folio_trylock(folio)) in afs_writepages_region()
748 if (folio->mapping != mapping || in afs_writepages_region()
749 !folio_test_dirty(folio)) { in afs_writepages_region()
750 start += folio_size(folio); in afs_writepages_region()
751 folio_unlock(folio); in afs_writepages_region()
755 if (folio_test_writeback(folio) || in afs_writepages_region()
756 folio_test_fscache(folio)) { in afs_writepages_region()
757 folio_unlock(folio); in afs_writepages_region()
759 folio_wait_writeback(folio); in afs_writepages_region()
761 folio_wait_fscache(folio); in afs_writepages_region()
766 start += folio_size(folio); in afs_writepages_region()
779 if (!folio_clear_dirty_for_io(folio)) in afs_writepages_region()
782 folio, start, end); in afs_writepages_region()
912 struct folio *folio = page_folio(vmf->page); in afs_page_mkwrite() local
920 _enter("{{%llx:%llu}},{%lx}", vnode->fid.vid, vnode->fid.vnode, folio_index(folio)); in afs_page_mkwrite()
930 if (folio_test_fscache(folio) && in afs_page_mkwrite()
931 folio_wait_fscache_killable(folio) < 0) in afs_page_mkwrite()
935 if (folio_wait_writeback_killable(folio)) in afs_page_mkwrite()
938 if (folio_lock_killable(folio) < 0) in afs_page_mkwrite()
945 if (folio_wait_writeback_killable(folio) < 0) { in afs_page_mkwrite()
946 folio_unlock(folio); in afs_page_mkwrite()
950 priv = afs_folio_dirty(folio, 0, folio_size(folio)); in afs_page_mkwrite()
952 if (folio_test_private(folio)) { in afs_page_mkwrite()
953 folio_change_private(folio, (void *)priv); in afs_page_mkwrite()
954 trace_afs_folio_dirty(vnode, tracepoint_string("mkwrite+"), folio); in afs_page_mkwrite()
956 folio_attach_private(folio, (void *)priv); in afs_page_mkwrite()
957 trace_afs_folio_dirty(vnode, tracepoint_string("mkwrite"), folio); in afs_page_mkwrite()
998 int afs_launder_folio(struct folio *folio) in afs_launder_folio() argument
1000 struct afs_vnode *vnode = AFS_FS_I(folio_inode(folio)); in afs_launder_folio()
1007 _enter("{%lx}", folio->index); in afs_launder_folio()
1009 priv = (unsigned long)folio_get_private(folio); in afs_launder_folio()
1010 if (folio_clear_dirty_for_io(folio)) { in afs_launder_folio()
1012 t = folio_size(folio); in afs_launder_folio()
1013 if (folio_test_private(folio)) { in afs_launder_folio()
1014 f = afs_folio_dirty_from(folio, priv); in afs_launder_folio()
1015 t = afs_folio_dirty_to(folio, priv); in afs_launder_folio()
1018 bvec_set_folio(&bv, folio, t - f, f); in afs_launder_folio()
1021 trace_afs_folio_dirty(vnode, tracepoint_string("launder"), folio); in afs_launder_folio()
1022 ret = afs_store_data(vnode, &iter, folio_pos(folio) + f, true); in afs_launder_folio()
1025 trace_afs_folio_dirty(vnode, tracepoint_string("laundered"), folio); in afs_launder_folio()
1026 folio_detach_private(folio); in afs_launder_folio()
1027 folio_wait_fscache(folio); in afs_launder_folio()