Lines Matching defs:folio
301 static bool nfs_folio_is_full_write(struct folio *folio, loff_t pos,
304 unsigned int pglen = nfs_folio_length(folio);
305 unsigned int offset = offset_in_folio(folio, pos);
311 static bool nfs_want_read_modify_write(struct file *file, struct folio *folio,
318 if (folio_test_uptodate(folio) || folio_test_private(folio) ||
319 nfs_folio_is_full_write(folio, pos, len))
342 struct folio *folio;
350 folio = __filemap_get_folio(mapping, pos >> PAGE_SHIFT, FGP_WRITEBEGIN,
352 if (IS_ERR(folio))
353 return PTR_ERR(folio);
354 *pagep = &folio->page;
356 ret = nfs_flush_incompatible(file, folio);
358 folio_unlock(folio);
359 folio_put(folio);
361 nfs_want_read_modify_write(file, folio, pos, len)) {
363 ret = nfs_read_folio(file, folio);
364 folio_put(folio);
376 struct folio *folio = page_folio(page);
377 unsigned offset = offset_in_folio(folio, pos);
387 if (!folio_test_uptodate(folio)) {
388 size_t fsize = folio_size(folio);
389 unsigned pglen = nfs_folio_length(folio);
393 folio_zero_segments(folio, 0, offset, end, fsize);
394 folio_mark_uptodate(folio);
396 folio_zero_segment(folio, end, fsize);
398 folio_mark_uptodate(folio);
400 folio_zero_segment(folio, pglen, fsize);
403 status = nfs_update_folio(file, folio, offset, copied);
405 folio_unlock(folio);
406 folio_put(folio);
425 static void nfs_invalidate_folio(struct folio *folio, size_t offset,
428 struct inode *inode = folio_file_mapping(folio)->host;
430 folio->index, offset, length);
432 if (offset != 0 || length < folio_size(folio))
435 nfs_wb_folio_cancel(inode, folio);
436 folio_wait_fscache(folio);
437 trace_nfs_invalidate_folio(inode, folio);
441 * Attempt to release the private state associated with a folio
442 * - Called if either private or fscache flags are set on the folio
443 * - Caller holds folio lock
444 * - Return true (may release folio) or false (may not)
446 static bool nfs_release_folio(struct folio *folio, gfp_t gfp)
448 dfprintk(PAGECACHE, "NFS: release_folio(%p)\n", folio);
450 /* If the private flag is set, then the folio is not freeable */
451 if (folio_test_private(folio)) {
455 if (nfs_wb_folio(folio_file_mapping(folio)->host, folio) < 0)
458 return nfs_fscache_release_folio(folio, gfp);
461 static void nfs_check_dirty_writeback(struct folio *folio,
465 struct address_space *mapping = folio->mapping;
468 * Check if an unstable folio is currently being committed and
469 * if so, have the VM treat it as if the folio is under writeback
479 * If the private flag is set, then the folio is not freeable
483 if (folio_test_private(folio))
495 static int nfs_launder_folio(struct folio *folio)
497 struct inode *inode = folio->mapping->host;
501 inode->i_ino, folio_pos(folio));
503 folio_wait_fscache(folio);
504 ret = nfs_wb_folio(inode, folio);
505 trace_nfs_launder_folio_done(inode, folio, ret);
588 struct folio *folio = page_folio(vmf->page);
592 (long long)folio_file_pos(folio));
597 if (folio_test_fscache(folio) &&
598 folio_wait_fscache_killable(folio) < 0) {
607 folio_lock(folio);
608 mapping = folio_file_mapping(folio);
612 folio_wait_writeback(folio);
614 pagelen = nfs_folio_length(folio);
619 if (nfs_flush_incompatible(filp, folio) == 0 &&
620 nfs_update_folio(filp, folio, 0, pagelen) == 0)
625 folio_unlock(folio);