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