Lines Matching refs:dvnode
137 static bool afs_dir_check_page(struct afs_vnode *dvnode, struct page *page, in afs_dir_check_page() argument
163 __func__, dvnode->vfs_inode.i_ino, tmp, qty, in afs_dir_check_page()
165 trace_afs_dir_check_failed(dvnode, off, i_size); in afs_dir_check_page()
167 trace_afs_file_error(dvnode, -EIO, afs_file_error_dir_bad_magic); in afs_dir_check_page()
181 afs_stat_v(dvnode, n_read_dir); in afs_dir_check_page()
191 static void afs_dir_dump(struct afs_vnode *dvnode, struct afs_read *req) in afs_dir_dump() argument
194 struct address_space *mapping = dvnode->vfs_inode.i_mapping; in afs_dir_dump()
202 dvnode->fid.vid, dvnode->fid.vnode, in afs_dir_dump()
228 static int afs_dir_check(struct afs_vnode *dvnode, struct afs_read *req) in afs_dir_check() argument
230 struct address_space *mapping = dvnode->vfs_inode.i_mapping; in afs_dir_check()
248 if (!afs_dir_check_page(dvnode, page, req->file_size)) { in afs_dir_check()
249 afs_dir_dump(dvnode, req); in afs_dir_check()
280 static struct afs_read *afs_read_dir(struct afs_vnode *dvnode, struct key *key) in afs_read_dir() argument
281 __acquires(&dvnode->validate_lock) in afs_read_dir()
295 req->vnode = dvnode; in afs_read_dir()
300 i_size = i_size_read(&dvnode->vfs_inode); in afs_read_dir()
302 ret = afs_bad(dvnode, afs_file_error_dir_small); in afs_read_dir()
306 trace_afs_file_error(dvnode, -EFBIG, afs_file_error_dir_big); in afs_read_dir()
317 req->data_version = dvnode->status.data_version; /* May change */ in afs_read_dir()
318 iov_iter_xarray(&req->def_iter, READ, &dvnode->vfs_inode.i_mapping->i_pages, in afs_read_dir()
330 n = find_get_pages_contig(dvnode->vfs_inode.i_mapping, i, in afs_read_dir()
337 gfp_t gfp = dvnode->vfs_inode.i_mapping->gfp_mask; in afs_read_dir()
339 if (test_and_clear_bit(AFS_VNODE_DIR_VALID, &dvnode->flags)) in afs_read_dir()
340 afs_stat_v(dvnode, n_inval); in afs_read_dir()
347 dvnode->vfs_inode.i_mapping, in afs_read_dir()
366 if (down_read_killable(&dvnode->validate_lock) < 0) in afs_read_dir()
369 if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags)) in afs_read_dir()
372 up_read(&dvnode->validate_lock); in afs_read_dir()
373 if (down_write_killable(&dvnode->validate_lock) < 0) in afs_read_dir()
376 if (!test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags)) { in afs_read_dir()
377 trace_afs_reload_dir(dvnode); in afs_read_dir()
378 ret = afs_fetch_data(dvnode, req); in afs_read_dir()
388 up_write(&dvnode->validate_lock); in afs_read_dir()
393 ret = afs_dir_check(dvnode, req); in afs_read_dir()
399 set_bit(AFS_VNODE_DIR_VALID, &dvnode->flags); in afs_read_dir()
402 downgrade_write(&dvnode->validate_lock); in afs_read_dir()
407 up_write(&dvnode->validate_lock); in afs_read_dir()
417 static int afs_dir_iterate_block(struct afs_vnode *dvnode, in afs_dir_iterate_block() argument
457 return afs_bad(dvnode, afs_file_error_dir_name_too_long); in afs_dir_iterate_block()
473 return afs_bad(dvnode, afs_file_error_dir_over_end); in afs_dir_iterate_block()
484 return afs_bad(dvnode, afs_file_error_dir_unmarked_ext); in afs_dir_iterate_block()
528 struct afs_vnode *dvnode = AFS_FS_I(dir); in afs_dir_iterate() local
544 req = afs_read_dir(dvnode, key); in afs_dir_iterate()
563 slot = radix_tree_lookup_slot(&dvnode->vfs_inode.i_mapping->i_pages, in afs_dir_iterate()
569 ret = afs_bad(dvnode, afs_file_error_dir_missing_page); in afs_dir_iterate()
582 ret = afs_dir_iterate_block(dvnode, ctx, dblock, blkoff); in afs_dir_iterate()
597 up_read(&dvnode->validate_lock); in afs_dir_iterate()
801 static bool afs_server_supports_ibulk(struct afs_vnode *dvnode) in afs_server_supports_ibulk() argument
804 struct afs_volume *volume = dvnode->volume; in afs_server_supports_ibulk()
817 if (server == dvnode->cb_server) { in afs_server_supports_ibulk()
839 struct afs_vnode *dvnode = AFS_FS_I(dir), *vnode; in afs_do_lookup() local
841 afs_dataversion_t data_version = READ_ONCE(dvnode->status.data_version); in afs_do_lookup()
852 cookie->fids[i].vid = dvnode->fid.vid; in afs_do_lookup()
858 if (!afs_server_supports_ibulk(dvnode)) in afs_do_lookup()
882 op = afs_alloc_operation(NULL, dvnode->volume); in afs_do_lookup()
888 afs_op_set_vnode(op, 0, dvnode); in afs_do_lookup()
1025 struct afs_vnode *dvnode = AFS_FS_I(dir); in afs_lookup() local
1033 dvnode->fid.vid, dvnode->fid.vnode, dentry, dentry); in afs_lookup()
1042 if (test_bit(AFS_VNODE_DELETED, &dvnode->flags)) { in afs_lookup()
1047 key = afs_request_key(dvnode->volume->cell); in afs_lookup()
1053 ret = afs_validate(dvnode, key); in afs_lookup()
1067 afs_stat_v(dvnode, n_lookup); in afs_lookup()
1080 trace_afs_lookup(dvnode, &d->d_name, &fid); in afs_lookup()
1082 trace_afs_lookup(dvnode, &dentry->d_name, &fid); in afs_lookup()
1093 struct afs_vnode *dvnode; in afs_d_revalidate_rcu() local
1105 dvnode = AFS_FS_I(dir); in afs_d_revalidate_rcu()
1106 if (test_bit(AFS_VNODE_DELETED, &dvnode->flags)) in afs_d_revalidate_rcu()
1109 if (!afs_check_validity(dvnode)) in afs_d_revalidate_rcu()
1117 dir_version = (long)READ_ONCE(dvnode->status.data_version); in afs_d_revalidate_rcu()
1120 dir_version = (long)READ_ONCE(dvnode->invalid_before); in afs_d_revalidate_rcu()
1353 struct afs_vnode *dvnode = dvp->vnode; in afs_create_edit_dir() local
1357 down_write(&dvnode->validate_lock); in afs_create_edit_dir()
1358 if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags) && in afs_create_edit_dir()
1359 dvnode->status.data_version == dvp->dv_before + dvp->dv_delta) in afs_create_edit_dir()
1360 afs_edit_dir_add(dvnode, &op->dentry->d_name, &vp->fid, in afs_create_edit_dir()
1362 up_write(&dvnode->validate_lock); in afs_create_edit_dir()
1389 struct afs_vnode *dvnode = AFS_FS_I(dir); in afs_mkdir() local
1392 dvnode->fid.vid, dvnode->fid.vnode, dentry, mode); in afs_mkdir()
1394 op = afs_alloc_operation(NULL, dvnode->volume); in afs_mkdir()
1400 afs_op_set_vnode(op, 0, dvnode); in afs_mkdir()
1438 struct afs_vnode *dvnode = dvp->vnode; in afs_rmdir_edit_dir() local
1443 down_write(&dvnode->validate_lock); in afs_rmdir_edit_dir()
1444 if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags) && in afs_rmdir_edit_dir()
1445 dvnode->status.data_version == dvp->dv_before + dvp->dv_delta) in afs_rmdir_edit_dir()
1446 afs_edit_dir_remove(dvnode, &op->dentry->d_name, in afs_rmdir_edit_dir()
1448 up_write(&dvnode->validate_lock); in afs_rmdir_edit_dir()
1473 struct afs_vnode *dvnode = AFS_FS_I(dir), *vnode = NULL; in afs_rmdir() local
1477 dvnode->fid.vid, dvnode->fid.vnode, dentry); in afs_rmdir()
1479 op = afs_alloc_operation(NULL, dvnode->volume); in afs_rmdir()
1483 afs_op_set_vnode(op, 0, dvnode); in afs_rmdir()
1524 struct afs_vnode *dvnode = op->file[0].vnode; in afs_dir_remove_link() local
1537 } else if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags)) { in afs_dir_remove_link()
1573 struct afs_vnode *dvnode = dvp->vnode; in afs_unlink_edit_dir() local
1576 down_write(&dvnode->validate_lock); in afs_unlink_edit_dir()
1577 if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags) && in afs_unlink_edit_dir()
1578 dvnode->status.data_version == dvp->dv_before + dvp->dv_delta) in afs_unlink_edit_dir()
1579 afs_edit_dir_remove(dvnode, &op->dentry->d_name, in afs_unlink_edit_dir()
1581 up_write(&dvnode->validate_lock); in afs_unlink_edit_dir()
1606 struct afs_vnode *dvnode = AFS_FS_I(dir); in afs_unlink() local
1611 dvnode->fid.vid, dvnode->fid.vnode, dentry); in afs_unlink()
1616 op = afs_alloc_operation(NULL, dvnode->volume); in afs_unlink()
1620 afs_op_set_vnode(op, 0, dvnode); in afs_unlink()
1637 op->error = afs_sillyrename(dvnode, vnode, dentry, op->key); in afs_unlink()
1688 struct afs_vnode *dvnode = AFS_FS_I(dir); in afs_create() local
1692 dvnode->fid.vid, dvnode->fid.vnode, dentry, mode); in afs_create()
1697 op = afs_alloc_operation(NULL, dvnode->volume); in afs_create()
1703 afs_op_set_vnode(op, 0, dvnode); in afs_create()
1760 struct afs_vnode *dvnode = AFS_FS_I(dir); in afs_link() local
1766 dvnode->fid.vid, dvnode->fid.vnode, in afs_link()
1772 op = afs_alloc_operation(NULL, dvnode->volume); in afs_link()
1782 afs_op_set_vnode(op, 0, dvnode); in afs_link()
1819 struct afs_vnode *dvnode = AFS_FS_I(dir); in afs_symlink() local
1823 dvnode->fid.vid, dvnode->fid.vnode, dentry, in afs_symlink()
1834 op = afs_alloc_operation(NULL, dvnode->volume); in afs_symlink()
1840 afs_op_set_vnode(op, 0, dvnode); in afs_symlink()
2061 struct afs_vnode *dvnode = AFS_FS_I(page->mapping->host); in afs_dir_releasepage() local
2063 _enter("{{%llx:%llu}[%lu]}", dvnode->fid.vid, dvnode->fid.vnode, page->index); in afs_dir_releasepage()
2068 if (test_and_clear_bit(AFS_VNODE_DIR_VALID, &dvnode->flags)) in afs_dir_releasepage()
2069 afs_stat_v(dvnode, n_relpg); in afs_dir_releasepage()
2081 struct afs_vnode *dvnode = AFS_FS_I(page->mapping->host); in afs_dir_invalidatepage() local
2088 if (test_and_clear_bit(AFS_VNODE_DIR_VALID, &dvnode->flags)) in afs_dir_invalidatepage()
2089 afs_stat_v(dvnode, n_inval); in afs_dir_invalidatepage()