Lines Matching refs:dvnode

96 static void afs_dir_unuse_cookie(struct afs_vnode *dvnode, int ret)  in afs_dir_unuse_cookie()  argument
100 loff_t i_size = i_size_read(&dvnode->netfs.inode); in afs_dir_unuse_cookie()
102 afs_set_cache_aux(dvnode, &aux); in afs_dir_unuse_cookie()
103 fscache_unuse_cookie(afs_vnode_cache(dvnode), &aux, &i_size); in afs_dir_unuse_cookie()
105 fscache_unuse_cookie(afs_vnode_cache(dvnode), NULL, NULL); in afs_dir_unuse_cookie()
131 static void afs_dir_dump(struct afs_vnode *dvnode) in afs_dir_dump() argument
134 unsigned long long i_size = i_size_read(&dvnode->netfs.inode); in afs_dir_dump()
137 dvnode->fid.vid, dvnode->fid.vnode, i_size); in afs_dir_dump()
139 iov_iter_folio_queue(&iter, ITER_SOURCE, dvnode->directory, 0, 0, i_size); in afs_dir_dump()
147 static bool afs_dir_check_block(struct afs_vnode *dvnode, size_t progress, in afs_dir_check_block() argument
152 __func__, dvnode->netfs.inode.i_ino, in afs_dir_check_block()
154 trace_afs_dir_check_failed(dvnode, progress); in afs_dir_check_block()
155 trace_afs_file_error(dvnode, -EIO, afs_file_error_dir_bad_magic); in afs_dir_check_block()
164 afs_stat_v(dvnode, n_read_dir); in afs_dir_check_block()
174 struct afs_vnode *dvnode = priv; in afs_dir_check_step() local
181 if (!afs_dir_check_block(dvnode, progress, iter_base)) in afs_dir_check_step()
193 static int afs_dir_check(struct afs_vnode *dvnode) in afs_dir_check() argument
196 unsigned long long i_size = i_size_read(&dvnode->netfs.inode); in afs_dir_check()
202 iov_iter_folio_queue(&iter, ITER_SOURCE, dvnode->directory, 0, 0, i_size); in afs_dir_check()
203 checked = iterate_folioq(&iter, iov_iter_count(&iter), dvnode, NULL, in afs_dir_check()
206 afs_dir_dump(dvnode); in afs_dir_check()
231 static ssize_t afs_do_read_single(struct afs_vnode *dvnode, struct file *file) in afs_do_read_single() argument
236 bool is_dir = (S_ISDIR(dvnode->netfs.inode.i_mode) && in afs_do_read_single()
237 !test_bit(AFS_VNODE_MOUNTPOINT, &dvnode->flags)); in afs_do_read_single()
239 i_size = i_size_read(&dvnode->netfs.inode); in afs_do_read_single()
242 return afs_bad(dvnode, afs_file_error_dir_small); in afs_do_read_single()
244 trace_afs_file_error(dvnode, -EFBIG, afs_file_error_dir_big); in afs_do_read_single()
249 trace_afs_file_error(dvnode, -EFBIG, afs_file_error_dir_big); in afs_do_read_single()
255 if (dvnode->directory_size < i_size) { in afs_do_read_single()
256 size_t cur_size = dvnode->directory_size; in afs_do_read_single()
259 &dvnode->directory, &cur_size, i_size, in afs_do_read_single()
260 mapping_gfp_mask(dvnode->netfs.inode.i_mapping)); in afs_do_read_single()
261 dvnode->directory_size = cur_size; in afs_do_read_single()
266 iov_iter_folio_queue(&iter, ITER_DEST, dvnode->directory, 0, 0, dvnode->directory_size); in afs_do_read_single()
272 ret = netfs_read_single(&dvnode->netfs.inode, file, &iter); in afs_do_read_single()
274 i_size = i_size_read(&dvnode->netfs.inode); in afs_do_read_single()
281 int ret2 = afs_dir_check(dvnode); in afs_do_read_single()
285 } else if (i_size < folioq_folio_size(dvnode->directory, 0)) { in afs_do_read_single()
287 char *symlink = kmap_local_folio(folioq_folio(dvnode->directory, 0), 0); in afs_do_read_single()
297 ssize_t afs_read_single(struct afs_vnode *dvnode, struct file *file) in afs_read_single() argument
301 fscache_use_cookie(afs_vnode_cache(dvnode), false); in afs_read_single()
302 ret = afs_do_read_single(dvnode, file); in afs_read_single()
303 fscache_unuse_cookie(afs_vnode_cache(dvnode), NULL, NULL); in afs_read_single()
311 ssize_t afs_read_dir(struct afs_vnode *dvnode, struct file *file) in afs_read_dir() argument
312 __acquires(&dvnode->validate_lock) in afs_read_dir()
317 i_size = i_size_read(&dvnode->netfs.inode); in afs_read_dir()
320 if (down_read_killable(&dvnode->validate_lock) < 0) in afs_read_dir()
326 if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags) && in afs_read_dir()
327 test_bit(AFS_VNODE_DIR_READ, &dvnode->flags)) { in afs_read_dir()
332 up_read(&dvnode->validate_lock); in afs_read_dir()
333 if (down_write_killable(&dvnode->validate_lock) < 0) in afs_read_dir()
336 if (!test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags)) in afs_read_dir()
337 afs_invalidate_cache(dvnode, 0); in afs_read_dir()
339 if (!test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags) || in afs_read_dir()
340 !test_bit(AFS_VNODE_DIR_READ, &dvnode->flags)) { in afs_read_dir()
341 trace_afs_reload_dir(dvnode); in afs_read_dir()
342 ret = afs_read_single(dvnode, file); in afs_read_dir()
348 set_bit(AFS_VNODE_DIR_VALID, &dvnode->flags); in afs_read_dir()
349 set_bit(AFS_VNODE_DIR_READ, &dvnode->flags); in afs_read_dir()
354 downgrade_write(&dvnode->validate_lock); in afs_read_dir()
359 up_write(&dvnode->validate_lock); in afs_read_dir()
368 static int afs_dir_iterate_block(struct afs_vnode *dvnode, in afs_dir_iterate_block() argument
403 return afs_bad(dvnode, afs_file_error_dir_name_too_long); in afs_dir_iterate_block()
415 return afs_bad(dvnode, afs_file_error_dir_over_end); in afs_dir_iterate_block()
425 return afs_bad(dvnode, afs_file_error_dir_unmarked_ext); in afs_dir_iterate_block()
465 struct afs_vnode *dvnode = priv; in afs_dir_iterate_step() local
477 ret = afs_dir_iterate_block(dvnode, ctx->dir_ctx, iter_base); in afs_dir_iterate_step()
495 struct afs_vnode *dvnode = AFS_FS_I(dir); in afs_dir_iterate_contents() local
505 iov_iter_folio_queue(&iter, ITER_SOURCE, dvnode->directory, 0, 0, i_size); in afs_dir_iterate_contents()
508 iterate_folioq(&iter, iov_iter_count(&iter), dvnode, &ctx, in afs_dir_iterate_contents()
512 afs_invalidate_dir(dvnode, afs_dir_invalid_iter_stale); in afs_dir_iterate_contents()
522 struct afs_vnode *dvnode = AFS_FS_I(dir); in afs_dir_iterate() local
534 ret = afs_read_dir(dvnode, file); in afs_dir_iterate()
547 up_read(&dvnode->validate_lock); in afs_dir_iterate()
742 static bool afs_server_supports_ibulk(struct afs_vnode *dvnode) in afs_server_supports_ibulk() argument
745 struct afs_volume *volume = dvnode->volume; in afs_server_supports_ibulk()
758 if (server == dvnode->cb_server) { in afs_server_supports_ibulk()
779 struct afs_vnode *dvnode = AFS_FS_I(dir), *vnode; in afs_do_lookup() local
781 afs_dataversion_t data_version = READ_ONCE(dvnode->status.data_version); in afs_do_lookup()
793 cookie->fids[i].vid = dvnode->fid.vid; in afs_do_lookup()
800 ret = afs_dir_search(dvnode, &dentry->d_name, &cookie->fids[1], &data_version); in afs_do_lookup()
804 supports_ibulk = afs_server_supports_ibulk(dvnode); in afs_do_lookup()
823 op = afs_alloc_operation(NULL, dvnode->volume); in afs_do_lookup()
829 afs_op_set_vnode(op, 0, dvnode); in afs_do_lookup()
969 struct afs_vnode *dvnode = AFS_FS_I(dir); in afs_lookup() local
976 dvnode->fid.vid, dvnode->fid.vnode, dentry, dentry); in afs_lookup()
985 if (test_bit(AFS_VNODE_DELETED, &dvnode->flags)) { in afs_lookup()
990 ret = afs_validate(dvnode, NULL); in afs_lookup()
992 afs_dir_unuse_cookie(dvnode, ret); in afs_lookup()
1004 afs_stat_v(dvnode, n_lookup); in afs_lookup()
1015 trace_afs_lookup(dvnode, &d->d_name, &fid); in afs_lookup()
1017 trace_afs_lookup(dvnode, &dentry->d_name, &fid); in afs_lookup()
1026 static int afs_d_revalidate_rcu(struct afs_vnode *dvnode, struct dentry *dentry) in afs_d_revalidate_rcu() argument
1032 if (test_bit(AFS_VNODE_DELETED, &dvnode->flags)) in afs_d_revalidate_rcu()
1035 if (!afs_check_validity(dvnode)) in afs_d_revalidate_rcu()
1043 dir_version = (long)READ_ONCE(dvnode->status.data_version); in afs_d_revalidate_rcu()
1046 dir_version = (long)READ_ONCE(dvnode->invalid_before); in afs_d_revalidate_rcu()
1283 struct afs_vnode *dvnode = dvp->vnode; in afs_create_edit_dir() local
1287 fscache_begin_write_operation(&cres, afs_vnode_cache(dvnode)); in afs_create_edit_dir()
1288 down_write(&dvnode->validate_lock); in afs_create_edit_dir()
1289 if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags) && in afs_create_edit_dir()
1290 dvnode->status.data_version == dvp->dv_before + dvp->dv_delta) in afs_create_edit_dir()
1291 afs_edit_dir_add(dvnode, &op->dentry->d_name, &vp->fid, in afs_create_edit_dir()
1293 up_write(&dvnode->validate_lock); in afs_create_edit_dir()
1321 struct afs_vnode *dvnode = AFS_FS_I(dir); in afs_mkdir() local
1325 dvnode->fid.vid, dvnode->fid.vnode, dentry, mode); in afs_mkdir()
1327 op = afs_alloc_operation(NULL, dvnode->volume); in afs_mkdir()
1333 fscache_use_cookie(afs_vnode_cache(dvnode), true); in afs_mkdir()
1335 afs_op_set_vnode(op, 0, dvnode); in afs_mkdir()
1345 afs_dir_unuse_cookie(dvnode, ret); in afs_mkdir()
1376 struct afs_vnode *dvnode = dvp->vnode; in afs_rmdir_edit_dir() local
1381 fscache_begin_write_operation(&cres, afs_vnode_cache(dvnode)); in afs_rmdir_edit_dir()
1382 down_write(&dvnode->validate_lock); in afs_rmdir_edit_dir()
1383 if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags) && in afs_rmdir_edit_dir()
1384 dvnode->status.data_version == dvp->dv_before + dvp->dv_delta) in afs_rmdir_edit_dir()
1385 afs_edit_dir_remove(dvnode, &op->dentry->d_name, in afs_rmdir_edit_dir()
1387 up_write(&dvnode->validate_lock); in afs_rmdir_edit_dir()
1413 struct afs_vnode *dvnode = AFS_FS_I(dir), *vnode = NULL; in afs_rmdir() local
1417 dvnode->fid.vid, dvnode->fid.vnode, dentry); in afs_rmdir()
1419 op = afs_alloc_operation(NULL, dvnode->volume); in afs_rmdir()
1423 fscache_use_cookie(afs_vnode_cache(dvnode), true); in afs_rmdir()
1425 afs_op_set_vnode(op, 0, dvnode); in afs_rmdir()
1454 afs_dir_unuse_cookie(dvnode, ret); in afs_rmdir()
1474 struct afs_vnode *dvnode = op->file[0].vnode; in afs_dir_remove_link() local
1487 } else if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags)) { in afs_dir_remove_link()
1524 struct afs_vnode *dvnode = dvp->vnode; in afs_unlink_edit_dir() local
1527 fscache_begin_write_operation(&cres, afs_vnode_cache(dvnode)); in afs_unlink_edit_dir()
1528 down_write(&dvnode->validate_lock); in afs_unlink_edit_dir()
1529 if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags) && in afs_unlink_edit_dir()
1530 dvnode->status.data_version == dvp->dv_before + dvp->dv_delta) in afs_unlink_edit_dir()
1531 afs_edit_dir_remove(dvnode, &op->dentry->d_name, in afs_unlink_edit_dir()
1533 up_write(&dvnode->validate_lock); in afs_unlink_edit_dir()
1559 struct afs_vnode *dvnode = AFS_FS_I(dir); in afs_unlink() local
1564 dvnode->fid.vid, dvnode->fid.vnode, dentry); in afs_unlink()
1569 op = afs_alloc_operation(NULL, dvnode->volume); in afs_unlink()
1573 fscache_use_cookie(afs_vnode_cache(dvnode), true); in afs_unlink()
1575 afs_op_set_vnode(op, 0, dvnode); in afs_unlink()
1592 afs_op_set_error(op, afs_sillyrename(dvnode, vnode, dentry, op->key)); in afs_unlink()
1623 afs_dir_unuse_cookie(dvnode, ret); in afs_unlink()
1643 struct afs_vnode *dvnode = AFS_FS_I(dir); in afs_create() local
1647 dvnode->fid.vid, dvnode->fid.vnode, dentry, mode); in afs_create()
1652 op = afs_alloc_operation(NULL, dvnode->volume); in afs_create()
1658 fscache_use_cookie(afs_vnode_cache(dvnode), true); in afs_create()
1660 afs_op_set_vnode(op, 0, dvnode); in afs_create()
1671 afs_dir_unuse_cookie(dvnode, ret); in afs_create()
1719 struct afs_vnode *dvnode = AFS_FS_I(dir); in afs_link() local
1725 dvnode->fid.vid, dvnode->fid.vnode, in afs_link()
1731 op = afs_alloc_operation(NULL, dvnode->volume); in afs_link()
1737 fscache_use_cookie(afs_vnode_cache(dvnode), true); in afs_link()
1743 afs_op_set_vnode(op, 0, dvnode); in afs_link()
1755 afs_dir_unuse_cookie(dvnode, ret); in afs_link()
1760 afs_dir_unuse_cookie(dvnode, ret); in afs_link()
1783 struct afs_vnode *dvnode = AFS_FS_I(dir); in afs_symlink() local
1787 dvnode->fid.vid, dvnode->fid.vnode, dentry, in afs_symlink()
1798 op = afs_alloc_operation(NULL, dvnode->volume); in afs_symlink()
1804 fscache_use_cookie(afs_vnode_cache(dvnode), true); in afs_symlink()
1806 afs_op_set_vnode(op, 0, dvnode); in afs_symlink()
1815 afs_dir_unuse_cookie(dvnode, ret); in afs_symlink()
2072 struct afs_vnode *dvnode = AFS_FS_I(mapping->host); in afs_single_writepages() local
2074 bool is_dir = (S_ISDIR(dvnode->netfs.inode.i_mode) && in afs_single_writepages()
2075 !test_bit(AFS_VNODE_MOUNTPOINT, &dvnode->flags)); in afs_single_writepages()
2081 down_read(&dvnode->validate_lock); in afs_single_writepages()
2084 test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags) : in afs_single_writepages()
2085 atomic64_read(&dvnode->cb_expires_at) != AFS_NO_CB_PROMISE) { in afs_single_writepages()
2086 iov_iter_folio_queue(&iter, ITER_SOURCE, dvnode->directory, 0, 0, in afs_single_writepages()
2087 i_size_read(&dvnode->netfs.inode)); in afs_single_writepages()
2091 up_read(&dvnode->validate_lock); in afs_single_writepages()