Lines Matching refs:dvnode

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