Lines Matching refs:dvnode
137 static bool afs_dir_check_folio(struct afs_vnode *dvnode, struct folio *folio, in afs_dir_check_folio() argument
156 __func__, dvnode->netfs.inode.i_ino, in afs_dir_check_folio()
158 trace_afs_dir_check_failed(dvnode, pos + offset, i_size); in afs_dir_check_folio()
160 trace_afs_file_error(dvnode, -EIO, afs_file_error_dir_bad_magic); in afs_dir_check_folio()
173 afs_stat_v(dvnode, n_read_dir); in afs_dir_check_folio()
183 static void afs_dir_dump(struct afs_vnode *dvnode, struct afs_read *req) in afs_dir_dump() argument
186 struct address_space *mapping = dvnode->netfs.inode.i_mapping; in afs_dir_dump()
194 dvnode->fid.vid, dvnode->fid.vnode, in afs_dir_dump()
218 static int afs_dir_check(struct afs_vnode *dvnode, struct afs_read *req) in afs_dir_check() argument
220 struct address_space *mapping = dvnode->netfs.inode.i_mapping; in afs_dir_check()
237 if (!afs_dir_check_folio(dvnode, folio, req->actual_len)) { in afs_dir_check()
238 afs_dir_dump(dvnode, req); in afs_dir_check()
269 static struct afs_read *afs_read_dir(struct afs_vnode *dvnode, struct key *key) in afs_read_dir() argument
270 __acquires(&dvnode->validate_lock) in afs_read_dir()
272 struct address_space *mapping = dvnode->netfs.inode.i_mapping; in afs_read_dir()
285 req->vnode = dvnode; in afs_read_dir()
290 i_size = i_size_read(&dvnode->netfs.inode); in afs_read_dir()
292 ret = afs_bad(dvnode, afs_file_error_dir_small); in afs_read_dir()
296 trace_afs_file_error(dvnode, -EFBIG, afs_file_error_dir_big); in afs_read_dir()
307 req->data_version = dvnode->status.data_version; /* May change */ in afs_read_dir()
308 iov_iter_xarray(&req->def_iter, READ, &dvnode->netfs.inode.i_mapping->i_pages, in afs_read_dir()
322 if (test_and_clear_bit(AFS_VNODE_DIR_VALID, &dvnode->flags)) in afs_read_dir()
323 afs_stat_v(dvnode, n_inval); in afs_read_dir()
343 if (down_read_killable(&dvnode->validate_lock) < 0) in afs_read_dir()
346 if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags)) in afs_read_dir()
349 up_read(&dvnode->validate_lock); in afs_read_dir()
350 if (down_write_killable(&dvnode->validate_lock) < 0) in afs_read_dir()
353 if (!test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags)) { in afs_read_dir()
354 trace_afs_reload_dir(dvnode); in afs_read_dir()
355 ret = afs_fetch_data(dvnode, req); in afs_read_dir()
365 up_write(&dvnode->validate_lock); in afs_read_dir()
370 ret = afs_dir_check(dvnode, req); in afs_read_dir()
376 set_bit(AFS_VNODE_DIR_VALID, &dvnode->flags); in afs_read_dir()
379 downgrade_write(&dvnode->validate_lock); in afs_read_dir()
384 up_write(&dvnode->validate_lock); in afs_read_dir()
394 static int afs_dir_iterate_block(struct afs_vnode *dvnode, in afs_dir_iterate_block() argument
434 return afs_bad(dvnode, afs_file_error_dir_name_too_long); in afs_dir_iterate_block()
450 return afs_bad(dvnode, afs_file_error_dir_over_end); in afs_dir_iterate_block()
461 return afs_bad(dvnode, afs_file_error_dir_unmarked_ext); in afs_dir_iterate_block()
495 struct afs_vnode *dvnode = AFS_FS_I(dir); in afs_dir_iterate() local
509 req = afs_read_dir(dvnode, key); in afs_dir_iterate()
527 ret = afs_bad(dvnode, afs_file_error_dir_missing_page); in afs_dir_iterate()
537 ret = afs_dir_iterate_block(dvnode, ctx, dblock, in afs_dir_iterate()
549 up_read(&dvnode->validate_lock); in afs_dir_iterate()
750 static bool afs_server_supports_ibulk(struct afs_vnode *dvnode) in afs_server_supports_ibulk() argument
753 struct afs_volume *volume = dvnode->volume; in afs_server_supports_ibulk()
766 if (server == dvnode->cb_server) { in afs_server_supports_ibulk()
788 struct afs_vnode *dvnode = AFS_FS_I(dir), *vnode; in afs_do_lookup() local
790 afs_dataversion_t data_version = READ_ONCE(dvnode->status.data_version); in afs_do_lookup()
801 cookie->fids[i].vid = dvnode->fid.vid; in afs_do_lookup()
807 if (!afs_server_supports_ibulk(dvnode)) in afs_do_lookup()
831 op = afs_alloc_operation(NULL, dvnode->volume); in afs_do_lookup()
837 afs_op_set_vnode(op, 0, dvnode); in afs_do_lookup()
974 struct afs_vnode *dvnode = AFS_FS_I(dir); in afs_lookup() local
982 dvnode->fid.vid, dvnode->fid.vnode, dentry, dentry); in afs_lookup()
991 if (test_bit(AFS_VNODE_DELETED, &dvnode->flags)) { in afs_lookup()
996 key = afs_request_key(dvnode->volume->cell); in afs_lookup()
1002 ret = afs_validate(dvnode, key); in afs_lookup()
1016 afs_stat_v(dvnode, n_lookup); in afs_lookup()
1029 trace_afs_lookup(dvnode, &d->d_name, &fid); in afs_lookup()
1031 trace_afs_lookup(dvnode, &dentry->d_name, &fid); in afs_lookup()
1042 struct afs_vnode *dvnode; in afs_d_revalidate_rcu() local
1054 dvnode = AFS_FS_I(dir); in afs_d_revalidate_rcu()
1055 if (test_bit(AFS_VNODE_DELETED, &dvnode->flags)) in afs_d_revalidate_rcu()
1058 if (!afs_check_validity(dvnode)) in afs_d_revalidate_rcu()
1066 dir_version = (long)READ_ONCE(dvnode->status.data_version); in afs_d_revalidate_rcu()
1069 dir_version = (long)READ_ONCE(dvnode->invalid_before); in afs_d_revalidate_rcu()
1302 struct afs_vnode *dvnode = dvp->vnode; in afs_create_edit_dir() local
1306 down_write(&dvnode->validate_lock); in afs_create_edit_dir()
1307 if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags) && in afs_create_edit_dir()
1308 dvnode->status.data_version == dvp->dv_before + dvp->dv_delta) in afs_create_edit_dir()
1309 afs_edit_dir_add(dvnode, &op->dentry->d_name, &vp->fid, in afs_create_edit_dir()
1311 up_write(&dvnode->validate_lock); in afs_create_edit_dir()
1338 struct afs_vnode *dvnode = AFS_FS_I(dir); in afs_mkdir() local
1341 dvnode->fid.vid, dvnode->fid.vnode, dentry, mode); in afs_mkdir()
1343 op = afs_alloc_operation(NULL, dvnode->volume); in afs_mkdir()
1349 afs_op_set_vnode(op, 0, dvnode); in afs_mkdir()
1386 struct afs_vnode *dvnode = dvp->vnode; in afs_rmdir_edit_dir() local
1391 down_write(&dvnode->validate_lock); in afs_rmdir_edit_dir()
1392 if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags) && in afs_rmdir_edit_dir()
1393 dvnode->status.data_version == dvp->dv_before + dvp->dv_delta) in afs_rmdir_edit_dir()
1394 afs_edit_dir_remove(dvnode, &op->dentry->d_name, in afs_rmdir_edit_dir()
1396 up_write(&dvnode->validate_lock); in afs_rmdir_edit_dir()
1421 struct afs_vnode *dvnode = AFS_FS_I(dir), *vnode = NULL; in afs_rmdir() local
1425 dvnode->fid.vid, dvnode->fid.vnode, dentry); in afs_rmdir()
1427 op = afs_alloc_operation(NULL, dvnode->volume); in afs_rmdir()
1431 afs_op_set_vnode(op, 0, dvnode); in afs_rmdir()
1472 struct afs_vnode *dvnode = op->file[0].vnode; in afs_dir_remove_link() local
1485 } else if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags)) { in afs_dir_remove_link()
1521 struct afs_vnode *dvnode = dvp->vnode; in afs_unlink_edit_dir() local
1524 down_write(&dvnode->validate_lock); in afs_unlink_edit_dir()
1525 if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags) && in afs_unlink_edit_dir()
1526 dvnode->status.data_version == dvp->dv_before + dvp->dv_delta) in afs_unlink_edit_dir()
1527 afs_edit_dir_remove(dvnode, &op->dentry->d_name, in afs_unlink_edit_dir()
1529 up_write(&dvnode->validate_lock); in afs_unlink_edit_dir()
1554 struct afs_vnode *dvnode = AFS_FS_I(dir); in afs_unlink() local
1559 dvnode->fid.vid, dvnode->fid.vnode, dentry); in afs_unlink()
1564 op = afs_alloc_operation(NULL, dvnode->volume); in afs_unlink()
1568 afs_op_set_vnode(op, 0, dvnode); in afs_unlink()
1585 op->error = afs_sillyrename(dvnode, vnode, dentry, op->key); in afs_unlink()
1636 struct afs_vnode *dvnode = AFS_FS_I(dir); in afs_create() local
1640 dvnode->fid.vid, dvnode->fid.vnode, dentry, mode); in afs_create()
1645 op = afs_alloc_operation(NULL, dvnode->volume); in afs_create()
1651 afs_op_set_vnode(op, 0, dvnode); in afs_create()
1707 struct afs_vnode *dvnode = AFS_FS_I(dir); in afs_link() local
1713 dvnode->fid.vid, dvnode->fid.vnode, in afs_link()
1719 op = afs_alloc_operation(NULL, dvnode->volume); in afs_link()
1729 afs_op_set_vnode(op, 0, dvnode); in afs_link()
1766 struct afs_vnode *dvnode = AFS_FS_I(dir); in afs_symlink() local
1770 dvnode->fid.vid, dvnode->fid.vnode, dentry, in afs_symlink()
1781 op = afs_alloc_operation(NULL, dvnode->volume); in afs_symlink()
1787 afs_op_set_vnode(op, 0, dvnode); in afs_symlink()
2007 struct afs_vnode *dvnode = AFS_FS_I(folio_inode(folio)); in afs_dir_release_folio() local
2009 _enter("{{%llx:%llu}[%lu]}", dvnode->fid.vid, dvnode->fid.vnode, folio_index(folio)); in afs_dir_release_folio()
2014 if (test_and_clear_bit(AFS_VNODE_DIR_VALID, &dvnode->flags)) in afs_dir_release_folio()
2015 afs_stat_v(dvnode, n_relpg); in afs_dir_release_folio()
2025 struct afs_vnode *dvnode = AFS_FS_I(folio_inode(folio)); in afs_dir_invalidate_folio() local
2032 if (test_and_clear_bit(AFS_VNODE_DIR_VALID, &dvnode->flags)) in afs_dir_invalidate_folio()
2033 afs_stat_v(dvnode, n_inval); in afs_dir_invalidate_folio()