Lines Matching refs:folio

81 static int nilfs_prepare_chunk(struct folio *folio, unsigned int from,  in nilfs_prepare_chunk()  argument
84 loff_t pos = folio_pos(folio) + from; in nilfs_prepare_chunk()
86 return __block_write_begin(folio, pos, to - from, nilfs_get_block); in nilfs_prepare_chunk()
89 static void nilfs_commit_chunk(struct folio *folio, in nilfs_commit_chunk() argument
93 loff_t pos = folio_pos(folio) + from; in nilfs_commit_chunk()
98 nr_dirty = nilfs_page_count_clean_buffers(folio, from, to); in nilfs_commit_chunk()
99 copied = block_write_end(pos, len, len, folio); in nilfs_commit_chunk()
106 folio_unlock(folio); in nilfs_commit_chunk()
109 static bool nilfs_check_folio(struct folio *folio, char *kaddr) in nilfs_check_folio() argument
111 struct inode *dir = folio->mapping->host; in nilfs_check_folio()
115 size_t limit = folio_size(folio); in nilfs_check_folio()
119 if (dir->i_size < folio_pos(folio) + limit) { in nilfs_check_folio()
120 limit = dir->i_size - folio_pos(folio); in nilfs_check_folio()
145 folio_set_checked(folio); in nilfs_check_folio()
172 dir->i_ino, error, (folio->index << PAGE_SHIFT) + offs, in nilfs_check_folio()
180 dir->i_ino, (folio->index << PAGE_SHIFT) + offs, in nilfs_check_folio()
187 struct folio **foliop) in nilfs_get_folio()
190 struct folio *folio = read_mapping_folio(mapping, n, NULL); in nilfs_get_folio() local
193 if (IS_ERR(folio)) in nilfs_get_folio()
194 return folio; in nilfs_get_folio()
196 kaddr = kmap_local_folio(folio, 0); in nilfs_get_folio()
197 if (unlikely(!folio_test_checked(folio))) { in nilfs_get_folio()
198 if (!nilfs_check_folio(folio, kaddr)) in nilfs_get_folio()
202 *foliop = folio; in nilfs_get_folio()
206 folio_release_kmap(folio, kaddr); in nilfs_get_folio()
249 struct folio *folio; in nilfs_readdir() local
251 kaddr = nilfs_get_folio(inode, n, &folio); in nilfs_readdir()
263 folio_release_kmap(folio, kaddr); in nilfs_readdir()
273 folio_release_kmap(folio, kaddr); in nilfs_readdir()
279 folio_release_kmap(folio, kaddr); in nilfs_readdir()
295 const struct qstr *qstr, struct folio **foliop) in nilfs_find_entry()
352 struct nilfs_dir_entry *nilfs_dotdot(struct inode *dir, struct folio **foliop) in nilfs_dotdot()
354 struct folio *folio; in nilfs_dotdot() local
359 de = nilfs_get_folio(dir, 0, &folio); in nilfs_dotdot()
380 *foliop = folio; in nilfs_dotdot()
385 folio_release_kmap(folio, de); in nilfs_dotdot()
392 struct folio *folio; in nilfs_inode_by_name() local
394 de = nilfs_find_entry(dir, qstr, &folio); in nilfs_inode_by_name()
399 folio_release_kmap(folio, de); in nilfs_inode_by_name()
404 struct folio *folio, struct inode *inode) in nilfs_set_link() argument
406 size_t from = offset_in_folio(folio, de); in nilfs_set_link()
408 struct address_space *mapping = folio->mapping; in nilfs_set_link()
411 folio_lock(folio); in nilfs_set_link()
412 err = nilfs_prepare_chunk(folio, from, to); in nilfs_set_link()
414 folio_unlock(folio); in nilfs_set_link()
419 nilfs_commit_chunk(folio, mapping, from, to); in nilfs_set_link()
435 struct folio *folio = NULL; in nilfs_add_link() local
448 char *kaddr = nilfs_get_folio(dir, n, &folio); in nilfs_add_link()
453 folio_lock(folio); in nilfs_add_link()
456 kaddr += folio_size(folio) - reclen; in nilfs_add_link()
483 folio_unlock(folio); in nilfs_add_link()
484 folio_release_kmap(folio, kaddr); in nilfs_add_link()
490 from = offset_in_folio(folio, de); in nilfs_add_link()
492 err = nilfs_prepare_chunk(folio, from, to); in nilfs_add_link()
507 nilfs_commit_chunk(folio, folio->mapping, from, to); in nilfs_add_link()
512 folio_release_kmap(folio, de); in nilfs_add_link()
515 folio_unlock(folio); in nilfs_add_link()
523 int nilfs_delete_entry(struct nilfs_dir_entry *dir, struct folio *folio) in nilfs_delete_entry() argument
525 struct address_space *mapping = folio->mapping; in nilfs_delete_entry()
527 char *kaddr = (char *)((unsigned long)dir & ~(folio_size(folio) - 1)); in nilfs_delete_entry()
548 folio_lock(folio); in nilfs_delete_entry()
549 err = nilfs_prepare_chunk(folio, from, to); in nilfs_delete_entry()
551 folio_unlock(folio); in nilfs_delete_entry()
557 nilfs_commit_chunk(folio, mapping, from, to); in nilfs_delete_entry()
569 struct folio *folio = filemap_grab_folio(mapping, 0); in nilfs_make_empty() local
575 if (IS_ERR(folio)) in nilfs_make_empty()
576 return PTR_ERR(folio); in nilfs_make_empty()
578 err = nilfs_prepare_chunk(folio, 0, chunk_size); in nilfs_make_empty()
580 folio_unlock(folio); in nilfs_make_empty()
583 kaddr = kmap_local_folio(folio, 0); in nilfs_make_empty()
599 nilfs_commit_chunk(folio, mapping, 0, chunk_size); in nilfs_make_empty()
601 folio_put(folio); in nilfs_make_empty()
610 struct folio *folio = NULL; in nilfs_empty_dir() local
617 kaddr = nilfs_get_folio(inode, i, &folio); in nilfs_empty_dir()
646 folio_release_kmap(folio, kaddr); in nilfs_empty_dir()
651 folio_release_kmap(folio, kaddr); in nilfs_empty_dir()