Lines Matching defs:folio

58 static void nfs_readdir_clear_array(struct folio *);
157 struct folio *folio;
201 static void nfs_readdir_folio_init_array(struct folio *folio, u64 last_cookie,
206 array = kmap_local_folio(folio, 0);
219 static void nfs_readdir_clear_array(struct folio *folio)
224 array = kmap_local_folio(folio, 0);
231 static void nfs_readdir_folio_reinit_array(struct folio *folio, u64 last_cookie,
234 nfs_readdir_clear_array(folio);
235 nfs_readdir_folio_init_array(folio, last_cookie, change_attr);
238 static struct folio *
241 struct folio *folio = folio_alloc(gfp_flags, 0);
242 if (folio)
243 nfs_readdir_folio_init_array(folio, last_cookie, 0);
244 return folio;
247 static void nfs_readdir_folio_array_free(struct folio *folio)
249 if (folio) {
250 nfs_readdir_clear_array(folio);
251 folio_put(folio);
309 static int nfs_readdir_folio_array_append(struct folio *folio,
320 array = kmap_local_folio(folio, 0);
366 static bool nfs_readdir_folio_validate(struct folio *folio, u64 last_cookie,
369 struct nfs_cache_array *array = kmap_local_folio(folio, 0);
380 static void nfs_readdir_folio_unlock_and_put(struct folio *folio)
382 folio_unlock(folio);
383 folio_put(folio);
386 static void nfs_readdir_folio_init_and_validate(struct folio *folio, u64 cookie,
389 if (folio_test_uptodate(folio)) {
390 if (nfs_readdir_folio_validate(folio, cookie, change_attr))
392 nfs_readdir_clear_array(folio);
394 nfs_readdir_folio_init_array(folio, cookie, change_attr);
395 folio_mark_uptodate(folio);
398 static struct folio *nfs_readdir_folio_get_locked(struct address_space *mapping,
402 struct folio *folio;
404 folio = filemap_grab_folio(mapping, index);
405 if (IS_ERR(folio))
407 nfs_readdir_folio_init_and_validate(folio, cookie, change_attr);
408 return folio;
411 static u64 nfs_readdir_folio_last_cookie(struct folio *folio)
416 array = kmap_local_folio(folio, 0);
422 static bool nfs_readdir_folio_needs_filling(struct folio *folio)
427 array = kmap_local_folio(folio, 0);
433 static void nfs_readdir_folio_set_eof(struct folio *folio)
437 array = kmap_local_folio(folio, 0);
442 static struct folio *nfs_readdir_folio_get_next(struct address_space *mapping,
446 struct folio *folio;
448 folio = __filemap_get_folio(mapping, index,
451 if (IS_ERR(folio))
453 nfs_readdir_folio_init_and_validate(folio, cookie, change_attr);
454 if (nfs_readdir_folio_last_cookie(folio) != cookie)
455 nfs_readdir_folio_reinit_array(folio, cookie, change_attr);
456 return folio;
568 array = kmap_local_folio(desc->folio, 0);
822 struct folio **arrays, size_t narrays,
826 struct folio *new, *folio = *arrays;
845 status = nfs_readdir_folio_array_append(folio, entry, &cookie);
849 if (folio->mapping != mapping) {
856 *arrays = folio = new;
862 if (folio != *arrays)
863 nfs_readdir_folio_unlock_and_put(folio);
864 folio = new;
867 status = nfs_readdir_folio_array_append(folio, entry, &cookie);
874 nfs_readdir_folio_set_eof(folio);
887 if (folio != *arrays)
888 nfs_readdir_folio_unlock_and_put(folio);
928 struct folio **arrays, size_t narrays)
932 struct folio *folio = *arrays;
943 entry->cookie = nfs_readdir_folio_last_cookie(folio);
966 nfs_readdir_folio_set_eof(folio);
980 folio_put(desc->folio);
981 desc->folio = NULL;
987 folio_unlock(desc->folio);
991 static struct folio *
997 struct folio *folio;
999 folio = nfs_readdir_folio_get_locked(mapping, cookie, change_attr);
1000 if (!folio)
1002 if (desc->clear_cache && !nfs_readdir_folio_needs_filling(folio))
1003 nfs_readdir_folio_reinit_array(folio, cookie, change_attr);
1004 return folio;
1018 desc->folio = nfs_readdir_folio_get_cached(desc);
1019 if (!desc->folio)
1021 if (nfs_readdir_folio_needs_filling(desc->folio)) {
1028 desc->folio->index, desc->dtsize);
1030 &desc->folio, 1);
1088 array = kmap_local_folio(desc->folio, 0);
1144 struct folio **arrays;
1174 desc->folio = arrays[i];
1177 desc->folio = NULL;