Lines Matching defs:folio

68 						struct folio *folio);
175 static struct nfs_page *nfs_folio_private_request(struct folio *folio)
177 return folio_get_private(folio);
181 * nfs_folio_find_private_request - find head request associated with a folio
182 * @folio: pointer to folio
188 static struct nfs_page *nfs_folio_find_private_request(struct folio *folio)
190 struct address_space *mapping = folio_file_mapping(folio);
193 if (!folio_test_private(folio))
196 req = nfs_folio_private_request(folio);
205 static struct nfs_page *nfs_folio_find_swap_request(struct folio *folio)
207 struct inode *inode = folio_file_mapping(folio)->host;
210 if (!folio_test_swapcache(folio))
213 if (folio_test_swapcache(folio)) {
215 folio);
226 * nfs_folio_find_head_request - find head request associated with a folio
227 * @folio: pointer to folio
231 static struct nfs_page *nfs_folio_find_head_request(struct folio *folio)
235 req = nfs_folio_find_private_request(folio);
237 req = nfs_folio_find_swap_request(folio);
241 static struct nfs_page *nfs_folio_find_and_lock_request(struct folio *folio)
243 struct inode *inode = folio_file_mapping(folio)->host;
248 req = nfs_folio_find_head_request(folio);
262 if (head == nfs_folio_private_request(folio))
264 if (folio_test_swapcache(folio))
272 static void nfs_grow_file(struct folio *folio, unsigned int offset,
275 struct inode *inode = folio_file_mapping(folio)->host;
281 end_index = ((i_size - 1) >> folio_shift(folio)) << folio_order(folio);
282 if (i_size > 0 && folio_index(folio) < end_index)
284 end = folio_file_pos(folio) + (loff_t)offset + (loff_t)count;
310 static void nfs_mapping_set_error(struct folio *folio, int error)
312 struct address_space *mapping = folio_file_mapping(folio);
314 folio_set_error(folio);
383 struct folio *folio = nfs_page_to_folio(req);
385 if (folio_test_uptodate(folio))
389 folio_mark_uptodate(folio);
411 static void nfs_folio_set_writeback(struct folio *folio)
413 struct nfs_server *nfss = NFS_SERVER(folio_file_mapping(folio)->host);
415 folio_start_writeback(folio);
420 static void nfs_folio_end_writeback(struct folio *folio)
422 struct nfs_server *nfss = NFS_SERVER(folio_file_mapping(folio)->host);
424 folio_end_writeback(folio);
553 * @folio: the folio used to lookup the "page group" of nfs_page structures
563 * Returns NULL if no requests are found for @folio, or a ERR_PTR if an
566 static struct nfs_page *nfs_lock_and_join_requests(struct folio *folio)
568 struct inode *inode = folio_file_mapping(folio)->host;
579 head = nfs_folio_find_and_lock_request(folio);
608 static int nfs_page_async_flush(struct folio *folio,
615 req = nfs_lock_and_join_requests(folio);
622 nfs_folio_set_writeback(folio);
640 folio_redirty_for_writepage(wbc, folio);
644 nfs_add_stats(folio_file_mapping(folio)->host,
653 static int nfs_do_writepage(struct folio *folio, struct writeback_control *wbc,
656 nfs_pageio_cond_complete(pgio, folio_index(folio));
657 return nfs_page_async_flush(folio, wbc, pgio);
663 static int nfs_writepage_locked(struct folio *folio,
667 struct inode *inode = folio_file_mapping(folio)->host;
672 folio_redirty_for_writepage(wbc, folio);
679 err = nfs_do_writepage(folio, wbc, &pgio);
687 struct folio *folio = page_folio(page);
690 ret = nfs_writepage_locked(folio, wbc);
696 static int nfs_writepages_callback(struct folio *folio,
701 ret = nfs_do_writepage(folio, wbc, data);
703 folio_unlock(folio);
759 struct folio *folio = nfs_page_to_folio(req);
760 struct address_space *mapping = folio_file_mapping(folio);
773 if (likely(!folio_test_swapcache(folio))) {
775 folio_set_private(folio);
776 folio->private = req;
796 struct folio *folio = nfs_page_to_folio(req->wb_head);
797 struct address_space *mapping = folio_file_mapping(folio);
800 if (likely(folio && !folio_test_swapcache(folio))) {
801 folio->private = NULL;
802 folio_clear_private(folio);
816 struct folio *folio = nfs_page_to_folio(req);
817 if (folio)
818 filemap_dirty_folio(folio_mapping(folio), folio);
824 * Search through commit lists on @inode for the head request for @folio.
831 struct folio *folio)
840 freq = pnfs_search_commit_reqs(inode, &cinfo, folio);
846 if (nfs_page_to_folio(freq) == folio)
953 static void nfs_folio_clear_commit(struct folio *folio)
955 if (folio) {
956 long nr = folio_nr_pages(folio);
958 node_stat_mod_folio(folio, NR_WRITEBACK, -nr);
959 wb_stat_mod(&inode_to_bdi(folio_file_mapping(folio)->host)->wb,
1100 static struct nfs_page *nfs_try_to_update_request(struct folio *folio,
1111 req = nfs_lock_and_join_requests(folio);
1144 error = nfs_wb_folio(folio_file_mapping(folio)->host, folio);
1156 struct folio *folio,
1162 req = nfs_try_to_update_request(folio, offset, bytes);
1165 req = nfs_page_create_from_folio(ctx, folio, offset, bytes);
1174 struct folio *folio, unsigned int offset,
1179 req = nfs_setup_write_request(ctx, folio, offset, count);
1183 nfs_grow_file(folio, offset, count);
1190 int nfs_flush_incompatible(struct file *file, struct folio *folio)
1206 req = nfs_folio_find_head_request(folio);
1210 do_flush = nfs_page_to_folio(req) != folio ||
1220 status = nfs_wb_folio(folio_file_mapping(folio)->host, folio);
1292 static bool nfs_folio_write_uptodate(struct folio *folio, unsigned int pagelen)
1294 struct inode *inode = folio_file_mapping(folio)->host;
1308 return folio_test_uptodate(folio) != 0;
1326 static int nfs_can_extend_write(struct file *file, struct folio *folio,
1336 if (!nfs_folio_write_uptodate(folio, pagelen))
1368 int nfs_update_folio(struct file *file, struct folio *folio,
1372 struct address_space *mapping = folio_file_mapping(folio);
1374 unsigned int pagelen = nfs_folio_length(folio);
1380 (long long)(folio_file_pos(folio) + offset));
1385 if (nfs_can_extend_write(file, folio, pagelen)) {
1390 status = nfs_writepage_setup(ctx, folio, offset, count);
1803 struct folio *folio = nfs_page_to_folio(req);
1805 filemap_dirty_folio(folio_mapping(folio), folio);
1856 struct folio *folio;
1861 folio = nfs_page_to_folio(req);
1862 nfs_folio_clear_commit(folio);
1870 if (folio) {
1873 nfs_mapping_set_error(folio, status);
1884 if (folio)
2056 int nfs_wb_folio_cancel(struct inode *inode, struct folio *folio)
2061 folio_wait_writeback(folio);
2065 req = nfs_lock_and_join_requests(folio);
2070 /* all requests from this folio have been cancelled by
2084 * @folio: pointer to folio
2086 * Assumes that the folio has been locked by the caller, and will
2089 int nfs_wb_folio(struct inode *inode, struct folio *folio)
2091 loff_t range_start = folio_file_pos(folio);
2092 loff_t range_end = range_start + (loff_t)folio_size(folio) - 1;
2101 trace_nfs_writeback_folio(inode, folio);
2104 folio_wait_writeback(folio);
2105 if (folio_clear_dirty_for_io(folio)) {
2106 ret = nfs_writepage_locked(folio, &wbc);
2112 if (!folio_test_private(folio))
2119 trace_nfs_writeback_folio_done(inode, folio, ret);
2124 int nfs_migrate_folio(struct address_space *mapping, struct folio *dst,
2125 struct folio *src, enum migrate_mode mode)
2128 * If the private flag is set, the folio is currently associated with
2133 * the folio lock.