Lines Matching +full:vp +full:- +full:p
1 // SPDX-License-Identifier: GPL-2.0-or-later
100 loff_t i_size = i_size_read(&dvnode->netfs.inode); in afs_dir_unuse_cookie()
122 len -= AFS_DIR_BLOCK_SIZE; in afs_dir_dump_step()
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()
150 if (block->hdr.magic != AFS_DIR_MAGIC) { in afs_dir_check_block()
152 __func__, dvnode->netfs.inode.i_ino, in afs_dir_check_block()
153 progress, ntohs(block->hdr.magic)); in afs_dir_check_block()
155 trace_afs_file_error(dvnode, -EIO, afs_file_error_dir_bad_magic); in afs_dir_check_block()
161 * *should* be NUL-terminated anyway. in afs_dir_check_block()
163 ((u8 *)block)[AFS_DIR_BLOCK_SIZE - 1] = 0; in afs_dir_check_block()
184 len -= AFS_DIR_BLOCK_SIZE; in afs_dir_check_step()
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()
207 return -EIO; in afs_dir_check()
217 _enter("{%lu}", inode->i_ino); in afs_dir_open()
222 if (test_bit(AFS_VNODE_DELETED, &AFS_FS_I(inode)->flags)) in afs_dir_open()
223 return -ENOENT; in afs_dir_open()
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()
244 trace_afs_file_error(dvnode, -EFBIG, afs_file_error_dir_big); in afs_do_read_single()
245 return -EFBIG; in afs_do_read_single()
249 trace_afs_file_error(dvnode, -EFBIG, afs_file_error_dir_big); in afs_do_read_single()
250 return -EFBIG; 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()
279 ret = -ESTALE; in afs_do_read_single()
285 } else if (i_size < folioq_folio_size(dvnode->directory, 0)) { in afs_do_read_single()
286 /* NUL-terminate a symlink. */ in afs_do_read_single()
287 char *symlink = kmap_local_folio(folioq_folio(dvnode->directory, 0), 0); in afs_do_read_single()
309 * previous contents. We return -ESTALE if the caller needs to call us again.
312 __acquires(&dvnode->validate_lock) in afs_read_dir()
317 i_size = i_size_read(&dvnode->netfs.inode); in afs_read_dir()
319 ret = -ERESTARTSYS; in afs_read_dir()
320 if (down_read_killable(&dvnode->validate_lock) < 0) in afs_read_dir()
323 /* We only need to reread the data if it became invalid - or if we 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()
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()
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()
377 blknum = ctx->pos / AFS_DIR_BLOCK_SIZE; in afs_dir_iterate_block()
380 pos = DIV_ROUND_UP(ctx->pos, AFS_DIR_DIRENT_SIZE) - base; in afs_dir_iterate_block()
382 _enter("%llx,%x", ctx->pos, blknum); in afs_dir_iterate_block()
387 if (!(block->hdr.bitmap[slot / 8] & in afs_dir_iterate_block()
392 ctx->pos = (base + next) * sizeof(union afs_xdr_dirent); in afs_dir_iterate_block()
397 dire = &block->dirents[slot]; in afs_dir_iterate_block()
398 nlen = strnlen(dire->u.name, in afs_dir_iterate_block()
399 (unsigned long)(block + 1) - (unsigned long)dire->u.name - 1); in afs_dir_iterate_block()
400 if (nlen > AFSNAMEMAX - 1) { in afs_dir_iterate_block()
408 nlen, dire->u.name); in afs_dir_iterate_block()
418 /* Check that the name-extension dirents are all allocated */ in afs_dir_iterate_block()
422 if (!(block->hdr.bitmap[xslot / 8] & (1 << (xslot % 8)))) { in afs_dir_iterate_block()
432 ctx->pos = (base + next) * sizeof(union afs_xdr_dirent); in afs_dir_iterate_block()
437 if (!dir_emit(ctx, dire->u.name, nlen, in afs_dir_iterate_block()
438 ntohl(dire->u.vnode), in afs_dir_iterate_block()
439 (ctx->actor == afs_lookup_filldir || in afs_dir_iterate_block()
440 ctx->actor == afs_lookup_one_filldir)? in afs_dir_iterate_block()
441 ntohl(dire->u.unique) : DT_UNKNOWN)) { in afs_dir_iterate_block()
446 ctx->pos = (base + next) * sizeof(union afs_xdr_dirent); in afs_dir_iterate_block()
470 pr_err("Mis-iteration prog=%zx len=%zx\n", in afs_dir_iterate_step()
477 ret = afs_dir_iterate_block(dvnode, ctx->dir_ctx, iter_base); in afs_dir_iterate_step()
481 ctx->dir_ctx->pos = round_up(ctx->dir_ctx->pos, AFS_DIR_BLOCK_SIZE); in afs_dir_iterate_step()
483 len -= AFS_DIR_BLOCK_SIZE; in afs_dir_iterate_step()
500 dir_ctx->pos = round_up(dir_ctx->pos, sizeof(union afs_xdr_dirent)); in afs_dir_iterate_contents()
502 if (i_size <= 0 || dir_ctx->pos >= i_size) in afs_dir_iterate_contents()
505 iov_iter_folio_queue(&iter, ITER_SOURCE, dvnode->directory, 0, 0, i_size); in afs_dir_iterate_contents()
506 iov_iter_advance(&iter, round_down(dir_ctx->pos, AFS_DIR_BLOCK_SIZE)); in afs_dir_iterate_contents()
511 if (ctx.error == -ESTALE) in afs_dir_iterate_contents()
526 _enter("{%lu},%llx,,", dir->i_ino, ctx->pos); in afs_dir_iterate()
529 if (--retry_limit < 0) { in afs_dir_iterate()
531 ret = -ESTALE; in afs_dir_iterate()
536 if (ret != -ESTALE) in afs_dir_iterate()
538 if (test_bit(AFS_VNODE_DELETED, &AFS_FS_I(dir)->flags)) { in afs_dir_iterate()
539 ret = -ESTALE; in afs_dir_iterate()
547 up_read(&dvnode->validate_lock); in afs_dir_iterate()
548 } while (ret == -ESTALE); in afs_dir_iterate()
566 * - if afs_dir_iterate_block() spots this function, it'll pass the FID
576 cookie->name.name, cookie->name.len, name, nlen, in afs_lookup_one_filldir()
583 if (cookie->name.len != nlen || in afs_lookup_one_filldir()
584 memcmp(cookie->name.name, name, nlen) != 0) { in afs_lookup_one_filldir()
589 cookie->fid.vnode = ino; in afs_lookup_one_filldir()
590 cookie->fid.unique = dtype; in afs_lookup_one_filldir()
591 cookie->found = 1; in afs_lookup_one_filldir()
599 * - just returns the FID the dentry name maps to if found
605 struct afs_super_info *as = dir->i_sb->s_fs_info; in afs_do_lookup_one()
609 .fid.vid = as->volume->vid in afs_do_lookup_one()
613 _enter("{%lu},{%.*s},", dir->i_ino, name->len, name->name); in afs_do_lookup_one()
623 _leave(" = -ENOENT [not found]"); in afs_do_lookup_one()
624 return -ENOENT; in afs_do_lookup_one()
628 _leave(" = 0 { vn=%llu u=%u }", fid->vnode, fid->unique); in afs_do_lookup_one()
634 * - if afs_dir_iterate_block() spots this function, it'll pass the FID
644 cookie->name.name, cookie->name.len, name, nlen, in afs_lookup_filldir()
651 if (cookie->nr_fids < 50) { in afs_lookup_filldir()
652 cookie->fids[cookie->nr_fids].vnode = ino; in afs_lookup_filldir()
653 cookie->fids[cookie->nr_fids].unique = dtype; in afs_lookup_filldir()
654 cookie->nr_fids++; in afs_lookup_filldir()
657 return cookie->nr_fids < 50; in afs_lookup_filldir()
662 * into inodes and save the first one - which is the one we actually want.
666 struct afs_vnode_param *vp; in afs_do_lookup_success() local
674 for (i = 0; i < op->nr_files; i++) { in afs_do_lookup_success()
677 vp = &op->file[0]; in afs_do_lookup_success()
678 abort_code = vp->scb.status.abort_code; in afs_do_lookup_success()
680 op->call_abort_code = abort_code; in afs_do_lookup_success()
682 op->cumul_error.abort_code = abort_code; in afs_do_lookup_success()
687 vp = &op->file[1]; in afs_do_lookup_success()
691 vp = &op->more_files[i - 2]; in afs_do_lookup_success()
695 if (vp->scb.status.abort_code) in afs_do_lookup_success()
696 trace_afs_bulkstat_error(op, &vp->fid, i, vp->scb.status.abort_code); in afs_do_lookup_success()
697 if (!vp->scb.have_status && !vp->scb.have_error) in afs_do_lookup_success()
701 if (vp->vnode) { in afs_do_lookup_success()
702 if (!test_bit(AFS_VNODE_UNSET, &vp->vnode->flags)) in afs_do_lookup_success()
703 afs_vnode_commit_status(op, vp); in afs_do_lookup_success()
704 } else if (vp->scb.status.abort_code == 0) { in afs_do_lookup_success()
705 inode = afs_iget(op, vp); in afs_do_lookup_success()
708 afs_cache_permit(vnode, op->key, in afs_do_lookup_success()
709 0 /* Assume vnode->cb_break is 0 */ + in afs_do_lookup_success()
710 op->cb_v_break, in afs_do_lookup_success()
711 &vp->scb); in afs_do_lookup_success()
712 vp->vnode = vnode; in afs_do_lookup_success()
713 vp->put_vnode = true; in afs_do_lookup_success()
716 _debug("- abort %d %llx:%llx.%x", in afs_do_lookup_success()
717 vp->scb.status.abort_code, in afs_do_lookup_success()
718 vp->fid.vid, vp->fid.vnode, vp->fid.unique); in afs_do_lookup_success()
745 struct afs_volume *volume = dvnode->volume; in afs_server_supports_ibulk()
750 if (!test_bit(AFS_VOLUME_MAYBE_NO_IBULK, &volume->flags)) in afs_server_supports_ibulk()
754 slist = rcu_dereference(volume->servers); in afs_server_supports_ibulk()
756 for (i = 0; i < slist->nr_servers; i++) { in afs_server_supports_ibulk()
757 server = slist->servers[i].server; in afs_server_supports_ibulk()
758 if (server == dvnode->cb_server) { in afs_server_supports_ibulk()
759 if (test_bit(AFS_SERVER_FL_NO_IBULK, &server->flags)) in afs_server_supports_ibulk()
777 struct afs_vnode_param *vp; in afs_do_lookup() local
781 afs_dataversion_t data_version = READ_ONCE(dvnode->status.data_version); in afs_do_lookup()
786 _enter("{%lu},%p{%pd},", dir->i_ino, dentry, dentry); in afs_do_lookup()
790 return ERR_PTR(-ENOMEM); in afs_do_lookup()
792 for (i = 0; i < ARRAY_SIZE(cookie->fids); i++) in afs_do_lookup()
793 cookie->fids[i].vid = dvnode->fid.vid; in afs_do_lookup()
794 cookie->ctx.actor = afs_lookup_filldir; in afs_do_lookup()
795 cookie->name = dentry->d_name; in afs_do_lookup()
796 cookie->nr_fids = 2; /* slot 1 is saved for the fid we actually want in afs_do_lookup()
800 ret = afs_dir_search(dvnode, &dentry->d_name, &cookie->fids[1], &data_version); in afs_do_lookup()
806 /* ...then scan linearly from that point for entries to lookup-ahead. */ in afs_do_lookup()
807 cookie->ctx.pos = (ret + 1) * AFS_DIR_DIRENT_SIZE; in afs_do_lookup()
808 afs_dir_iterate(dir, &cookie->ctx, NULL, &data_version); in afs_do_lookup()
811 dentry->d_fsdata = (void *)(unsigned long)data_version; in afs_do_lookup()
814 inode = ilookup5(dir->i_sb, cookie->fids[1].vnode, in afs_do_lookup()
815 afs_ilookup5_test_by_fid, &cookie->fids[1]); in afs_do_lookup()
819 /* Okay, we didn't find it. We need to query the server - and whilst in afs_do_lookup()
823 op = afs_alloc_operation(NULL, dvnode->volume); in afs_do_lookup()
830 afs_op_set_fid(op, 1, &cookie->fids[1]); in afs_do_lookup()
832 op->nr_files = cookie->nr_fids; in afs_do_lookup()
833 _debug("nr_files %u", op->nr_files); in afs_do_lookup()
836 if (op->nr_files > 2) { in afs_do_lookup()
837 op->more_files = kvcalloc(op->nr_files - 2, in afs_do_lookup()
840 if (!op->more_files) { in afs_do_lookup()
845 for (i = 2; i < op->nr_files; i++) { in afs_do_lookup()
846 vp = &op->more_files[i - 2]; in afs_do_lookup()
847 vp->fid = cookie->fids[i]; in afs_do_lookup()
852 ti = ilookup5_nowait(dir->i_sb, vp->fid.vnode, in afs_do_lookup()
853 afs_ilookup5_test_by_fid, &vp->fid); in afs_do_lookup()
856 vp->dv_before = vnode->status.data_version; in afs_do_lookup()
857 vp->cb_break_before = afs_calc_vnode_cb_break(vnode); in afs_do_lookup()
858 vp->vnode = vnode; in afs_do_lookup()
859 vp->put_vnode = true; in afs_do_lookup()
860 vp->speculative = true; /* vnode not locked */ in afs_do_lookup()
869 afs_op_set_error(op, -ENOTSUPP); in afs_do_lookup()
871 op->ops = &afs_inline_bulk_status_operation; in afs_do_lookup()
876 if (afs_op_error(op) == -ENOTSUPP) { in afs_do_lookup()
878 * op if any of the lookups fails - so, for the moment, revert in afs_do_lookup()
879 * to FS.FetchStatus for op->file[1]. in afs_do_lookup()
881 op->fetch_status.which = 1; in afs_do_lookup()
882 op->ops = &afs_lookup_fetch_status_operation; in afs_do_lookup()
889 if (op->file[1].scb.status.abort_code) { in afs_do_lookup()
890 afs_op_accumulate_error(op, -ECONNABORTED, in afs_do_lookup()
891 op->file[1].scb.status.abort_code); in afs_do_lookup()
893 inode = &op->file[1].vnode->netfs.inode; in afs_do_lookup()
894 op->file[1].vnode = NULL; in afs_do_lookup()
898 if (op->file[0].scb.have_status) in afs_do_lookup()
899 dentry->d_fsdata = (void *)(unsigned long)op->file[0].scb.status.data_version; in afs_do_lookup()
901 dentry->d_fsdata = (void *)(unsigned long)op->file[0].dv_before; in afs_do_lookup()
917 char *buf, *p, *name; in afs_lookup_atsys() local
922 ret = ERR_PTR(-ENOMEM); in afs_lookup_atsys()
923 p = buf = kmalloc(AFSNAMEMAX, GFP_KERNEL); in afs_lookup_atsys()
926 if (dentry->d_name.len > 4) { in afs_lookup_atsys()
927 memcpy(p, dentry->d_name.name, dentry->d_name.len - 4); in afs_lookup_atsys()
928 p += dentry->d_name.len - 4; in afs_lookup_atsys()
932 read_lock(&net->sysnames_lock); in afs_lookup_atsys()
933 subs = net->sysnames; in afs_lookup_atsys()
934 refcount_inc(&subs->usage); in afs_lookup_atsys()
935 read_unlock(&net->sysnames_lock); in afs_lookup_atsys()
937 for (i = 0; i < subs->nr; i++) { in afs_lookup_atsys()
938 name = subs->subs[i]; in afs_lookup_atsys()
939 len = dentry->d_name.len - 4 + strlen(name); in afs_lookup_atsys()
941 ret = ERR_PTR(-ENAMETOOLONG); in afs_lookup_atsys()
945 strcpy(p, name); in afs_lookup_atsys()
946 ret = lookup_noperm(&QSTR(buf), dentry->d_parent); in afs_lookup_atsys()
975 _enter("{%llx:%llu},%p{%pd},", in afs_lookup()
976 dvnode->fid.vid, dvnode->fid.vnode, dentry, dentry); in afs_lookup()
980 if (dentry->d_name.len >= AFSNAMEMAX) { in afs_lookup()
981 _leave(" = -ENAMETOOLONG"); in afs_lookup()
982 return ERR_PTR(-ENAMETOOLONG); in afs_lookup()
985 if (test_bit(AFS_VNODE_DELETED, &dvnode->flags)) { in afs_lookup()
986 _leave(" = -ESTALE"); in afs_lookup()
987 return ERR_PTR(-ESTALE); in afs_lookup()
997 if (dentry->d_name.len >= 4 && in afs_lookup()
998 dentry->d_name.name[dentry->d_name.len - 4] == '@' && in afs_lookup()
999 dentry->d_name.name[dentry->d_name.len - 3] == 's' && in afs_lookup()
1000 dentry->d_name.name[dentry->d_name.len - 2] == 'y' && in afs_lookup()
1001 dentry->d_name.name[dentry->d_name.len - 1] == 's') in afs_lookup()
1006 if (inode == ERR_PTR(-ENOENT)) in afs_lookup()
1009 fid = AFS_FS_I(inode)->fid; in afs_lookup()
1011 _debug("splice %p", dentry->d_inode); in afs_lookup()
1014 d->d_fsdata = dentry->d_fsdata; 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()
1030 _enter("%p", dentry); in afs_d_revalidate_rcu()
1032 if (test_bit(AFS_VNODE_DELETED, &dvnode->flags)) in afs_d_revalidate_rcu()
1033 return -ECHILD; in afs_d_revalidate_rcu()
1036 return -ECHILD; in afs_d_revalidate_rcu()
1040 * on a 32-bit system, we only have 32 bits in the dentry to store the in afs_d_revalidate_rcu()
1043 dir_version = (long)READ_ONCE(dvnode->status.data_version); in afs_d_revalidate_rcu()
1044 de_version = (long)READ_ONCE(dentry->d_fsdata); in afs_d_revalidate_rcu()
1046 dir_version = (long)READ_ONCE(dvnode->invalid_before); in afs_d_revalidate_rcu()
1047 if (de_version - dir_version < 0) in afs_d_revalidate_rcu()
1048 return -ECHILD; in afs_d_revalidate_rcu()
1056 * - NOTE! the hit can be a negative hit too, so we can't assume we have an
1076 vnode->fid.vid, vnode->fid.vnode, dentry, in afs_d_revalidate()
1077 vnode->flags); in afs_d_revalidate()
1082 key = afs_request_key(AFS_FS_S(dentry->d_sb)->volume->cell); in afs_d_revalidate()
1088 if (ret == -ERESTARTSYS) { in afs_d_revalidate()
1093 if (test_bit(AFS_VNODE_DELETED, &dir->flags)) { in afs_d_revalidate()
1100 * on a 32-bit system, we only have 32 bits in the dentry to store the in afs_d_revalidate()
1103 dir_version = dir->status.data_version; in afs_d_revalidate()
1104 de_version = (long)dentry->d_fsdata; in afs_d_revalidate()
1108 invalid_before = dir->invalid_before; in afs_d_revalidate()
1109 if (de_version - (long)invalid_before >= 0) in afs_d_revalidate()
1116 ret = afs_do_lookup_one(&dir->netfs.inode, name, &fid, &dir_version); in afs_d_revalidate()
1133 if (fid.vnode != vnode->fid.vnode) { in afs_d_revalidate()
1136 vnode->fid.vnode); in afs_d_revalidate()
1143 if (fid.unique != vnode->fid.unique) { in afs_d_revalidate()
1144 _debug("%pd: file deleted (uq %u -> %u I:%u)", in afs_d_revalidate()
1146 vnode->fid.unique, in afs_d_revalidate()
1147 vnode->netfs.inode.i_generation); in afs_d_revalidate()
1152 case -ENOENT: in afs_d_revalidate()
1165 dentry->d_fsdata = (void *)(unsigned long)dir_version; in afs_d_revalidate()
1182 * - called from dput() when d_count is going to 0.
1183 * - return 1 to request dentry be unhashed, 0 otherwise
1189 if (dentry->d_flags & DCACHE_NFSFS_RENAMED) in afs_d_delete()
1193 (test_bit(AFS_VNODE_DELETED, &AFS_FS_I(d_inode(dentry))->flags) || in afs_d_delete()
1194 test_bit(AFS_VNODE_PSEUDODIR, &AFS_FS_I(d_inode(dentry))->flags))) in afs_d_delete()
1210 if (dentry->d_flags & DCACHE_NFSFS_RENAMED) in afs_d_iput()
1225 struct afs_vnode *vnode = op->file[0].vnode; in afs_check_for_remote_deletion()
1229 set_bit(AFS_VNODE_DELETED, &vnode->flags); in afs_check_for_remote_deletion()
1230 clear_nlink(&vnode->netfs.inode); in afs_check_for_remote_deletion()
1240 struct afs_vnode_param *dvp = &op->file[0]; in afs_vnode_new_inode()
1241 struct afs_vnode_param *vp = &op->file[1]; in afs_vnode_new_inode() local
1249 inode = afs_iget(op, vp); in afs_vnode_new_inode()
1251 /* ENOMEM or EINTR at a really inconvenient time - just abandon in afs_vnode_new_inode()
1259 set_bit(AFS_VNODE_NEW_CONTENT, &vnode->flags); in afs_vnode_new_inode()
1260 if (S_ISDIR(inode->i_mode)) in afs_vnode_new_inode()
1261 afs_mkdir_init_dir(vnode, dvp->vnode); in afs_vnode_new_inode()
1262 else if (S_ISLNK(inode->i_mode)) in afs_vnode_new_inode()
1265 afs_cache_permit(vnode, op->key, vnode->cb_break, &vp->scb); in afs_vnode_new_inode()
1266 d_instantiate(op->dentry, inode); in afs_vnode_new_inode()
1271 _enter("op=%08x", op->debug_id); in afs_create_success()
1272 op->ctime = op->file[0].scb.status.mtime_client; in afs_create_success()
1273 afs_vnode_commit_status(op, &op->file[0]); in afs_create_success()
1274 afs_update_dentry_version(op, &op->file[0], op->dentry); in afs_create_success()
1281 struct afs_vnode_param *dvp = &op->file[0]; in afs_create_edit_dir()
1282 struct afs_vnode_param *vp = &op->file[1]; in afs_create_edit_dir() local
1283 struct afs_vnode *dvnode = dvp->vnode; in afs_create_edit_dir()
1285 _enter("op=%08x", op->debug_id); 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()
1292 op->create.reason); in afs_create_edit_dir()
1293 up_write(&dvnode->validate_lock); in afs_create_edit_dir()
1299 _enter("op=%08x", op->debug_id); in afs_create_put()
1302 d_drop(op->dentry); in afs_create_put()
1325 dvnode->fid.vid, dvnode->fid.vnode, dentry, mode); in afs_mkdir()
1327 op = afs_alloc_operation(NULL, dvnode->volume); in afs_mkdir()
1336 op->file[0].dv_delta = 1; in afs_mkdir()
1337 op->file[0].modification = true; in afs_mkdir()
1338 op->file[0].update_ctime = true; in afs_mkdir()
1339 op->dentry = dentry; in afs_mkdir()
1340 op->create.mode = S_IFDIR | mode; in afs_mkdir()
1341 op->create.reason = afs_edit_dir_for_mkdir; in afs_mkdir()
1342 op->mtime = current_time(dir); in afs_mkdir()
1343 op->ops = &afs_mkdir_operation; in afs_mkdir()
1357 clear_nlink(&vnode->netfs.inode); in afs_dir_remove_subdir()
1358 set_bit(AFS_VNODE_DELETED, &vnode->flags); in afs_dir_remove_subdir()
1366 _enter("op=%08x", op->debug_id); in afs_rmdir_success()
1367 op->ctime = op->file[0].scb.status.mtime_client; in afs_rmdir_success()
1368 afs_vnode_commit_status(op, &op->file[0]); in afs_rmdir_success()
1369 afs_update_dentry_version(op, &op->file[0], op->dentry); in afs_rmdir_success()
1375 struct afs_vnode_param *dvp = &op->file[0]; in afs_rmdir_edit_dir()
1376 struct afs_vnode *dvnode = dvp->vnode; in afs_rmdir_edit_dir()
1378 _enter("op=%08x", op->debug_id); in afs_rmdir_edit_dir()
1379 afs_dir_remove_subdir(op->dentry); 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()
1393 _enter("op=%08x", op->debug_id); in afs_rmdir_put()
1394 if (op->file[1].vnode) in afs_rmdir_put()
1395 up_write(&op->file[1].vnode->rmdir_lock); in afs_rmdir_put()
1417 dvnode->fid.vid, dvnode->fid.vnode, dentry); in afs_rmdir()
1419 op = afs_alloc_operation(NULL, dvnode->volume); in afs_rmdir()
1426 op->file[0].dv_delta = 1; in afs_rmdir()
1427 op->file[0].modification = true; in afs_rmdir()
1428 op->file[0].update_ctime = true; in afs_rmdir()
1430 op->dentry = dentry; in afs_rmdir()
1431 op->ops = &afs_rmdir_operation; in afs_rmdir()
1436 ret = afs_validate(vnode, op->key); in afs_rmdir()
1442 ret = down_write_killable(&vnode->rmdir_lock); in afs_rmdir()
1445 op->file[1].vnode = vnode; in afs_rmdir()
1451 if (ret == -EEXIST) in afs_rmdir()
1452 ret = -ENOTEMPTY; in afs_rmdir()
1466 * break the callback promise on the file - if it had one - before it returns
1474 struct afs_vnode *dvnode = op->file[0].vnode; in afs_dir_remove_link()
1475 struct afs_vnode *vnode = op->file[1].vnode; in afs_dir_remove_link()
1476 struct dentry *dentry = op->dentry; in afs_dir_remove_link()
1480 (op->file[1].scb.have_status && op->file[1].scb.have_error)) in afs_dir_remove_link()
1485 if (test_bit(AFS_VNODE_DELETED, &vnode->flags)) { in afs_dir_remove_link()
1487 } else if (test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags)) { in afs_dir_remove_link()
1488 write_seqlock(&vnode->cb_lock); in afs_dir_remove_link()
1489 drop_nlink(&vnode->netfs.inode); in afs_dir_remove_link()
1490 if (vnode->netfs.inode.i_nlink == 0) { in afs_dir_remove_link()
1491 set_bit(AFS_VNODE_DELETED, &vnode->flags); in afs_dir_remove_link()
1494 write_sequnlock(&vnode->cb_lock); in afs_dir_remove_link()
1498 if (test_bit(AFS_VNODE_DELETED, &vnode->flags)) in afs_dir_remove_link()
1501 ret = afs_validate(vnode, op->key); in afs_dir_remove_link()
1502 if (ret != -ESTALE) in afs_dir_remove_link()
1506 _debug("nlink %d [val %d]", vnode->netfs.inode.i_nlink, afs_op_error(op)); in afs_dir_remove_link()
1511 _enter("op=%08x", op->debug_id); in afs_unlink_success()
1512 op->ctime = op->file[0].scb.status.mtime_client; in afs_unlink_success()
1513 afs_check_dir_conflict(op, &op->file[0]); in afs_unlink_success()
1514 afs_vnode_commit_status(op, &op->file[0]); in afs_unlink_success()
1515 afs_vnode_commit_status(op, &op->file[1]); in afs_unlink_success()
1516 afs_update_dentry_version(op, &op->file[0], op->dentry); in afs_unlink_success()
1523 struct afs_vnode_param *dvp = &op->file[0]; in afs_unlink_edit_dir()
1524 struct afs_vnode *dvnode = dvp->vnode; in afs_unlink_edit_dir()
1526 _enter("op=%08x", op->debug_id); 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()
1539 _enter("op=%08x", op->debug_id); in afs_unlink_put()
1540 if (op->unlink.need_rehash && afs_op_error(op) < 0 && afs_op_error(op) != -ENOENT) in afs_unlink_put()
1541 d_rehash(op->dentry); in afs_unlink_put()
1564 dvnode->fid.vid, dvnode->fid.vnode, dentry); in afs_unlink()
1566 if (dentry->d_name.len >= AFSNAMEMAX) in afs_unlink()
1567 return -ENAMETOOLONG; in afs_unlink()
1569 op = afs_alloc_operation(NULL, dvnode->volume); in afs_unlink()
1576 op->file[0].dv_delta = 1; in afs_unlink()
1577 op->file[0].modification = true; in afs_unlink()
1578 op->file[0].update_ctime = true; in afs_unlink()
1581 ret = afs_validate(vnode, op->key); in afs_unlink()
1587 spin_lock(&dentry->d_lock); in afs_unlink()
1589 spin_unlock(&dentry->d_lock); in afs_unlink()
1592 afs_op_set_error(op, afs_sillyrename(dvnode, vnode, dentry, op->key)); in afs_unlink()
1598 op->unlink.need_rehash = true; in afs_unlink()
1600 spin_unlock(&dentry->d_lock); in afs_unlink()
1602 op->file[1].vnode = vnode; in afs_unlink()
1603 op->file[1].update_ctime = true; in afs_unlink()
1604 op->file[1].op_unlinked = true; in afs_unlink()
1605 op->dentry = dentry; in afs_unlink()
1606 op->ops = &afs_unlink_operation; in afs_unlink()
1613 if (afs_op_error(op) == 0 && (op->flags & AFS_OPERATION_DIR_CONFLICT)) { in afs_unlink()
1614 op->file[1].update_ctime = false; in afs_unlink()
1615 op->fetch_status.which = 1; in afs_unlink()
1616 op->ops = &afs_fetch_status_operation; in afs_unlink()
1644 int ret = -ENAMETOOLONG; in afs_create()
1647 dvnode->fid.vid, dvnode->fid.vnode, dentry, mode); in afs_create()
1649 if (dentry->d_name.len >= AFSNAMEMAX) in afs_create()
1652 op = afs_alloc_operation(NULL, dvnode->volume); in afs_create()
1661 op->file[0].dv_delta = 1; in afs_create()
1662 op->file[0].modification = true; in afs_create()
1663 op->file[0].update_ctime = true; in afs_create()
1665 op->dentry = dentry; in afs_create()
1666 op->create.mode = S_IFREG | mode; in afs_create()
1667 op->create.reason = afs_edit_dir_for_create; in afs_create()
1668 op->mtime = current_time(dir); in afs_create()
1669 op->ops = &afs_create_operation; in afs_create()
1682 struct afs_vnode_param *dvp = &op->file[0]; in afs_link_success()
1683 struct afs_vnode_param *vp = &op->file[1]; in afs_link_success() local
1685 _enter("op=%08x", op->debug_id); in afs_link_success()
1686 op->ctime = dvp->scb.status.mtime_client; in afs_link_success()
1688 afs_vnode_commit_status(op, vp); in afs_link_success()
1689 afs_update_dentry_version(op, dvp, op->dentry); in afs_link_success()
1690 if (op->dentry_2->d_parent == op->dentry->d_parent) in afs_link_success()
1691 afs_update_dentry_version(op, dvp, op->dentry_2); in afs_link_success()
1692 ihold(&vp->vnode->netfs.inode); in afs_link_success()
1693 d_instantiate(op->dentry, &vp->vnode->netfs.inode); in afs_link_success()
1698 _enter("op=%08x", op->debug_id); in afs_link_put()
1700 d_drop(op->dentry); in afs_link_put()
1721 int ret = -ENAMETOOLONG; in afs_link()
1724 vnode->fid.vid, vnode->fid.vnode, in afs_link()
1725 dvnode->fid.vid, dvnode->fid.vnode, in afs_link()
1728 if (dentry->d_name.len >= AFSNAMEMAX) in afs_link()
1731 op = afs_alloc_operation(NULL, dvnode->volume); in afs_link()
1739 ret = afs_validate(vnode, op->key); in afs_link()
1745 op->file[0].dv_delta = 1; in afs_link()
1746 op->file[0].modification = true; in afs_link()
1747 op->file[0].update_ctime = true; in afs_link()
1748 op->file[1].update_ctime = true; in afs_link()
1750 op->dentry = dentry; in afs_link()
1751 op->dentry_2 = from; in afs_link()
1752 op->ops = &afs_link_operation; in afs_link()
1753 op->create.reason = afs_edit_dir_for_link; in afs_link()
1787 dvnode->fid.vid, dvnode->fid.vnode, dentry, in afs_symlink()
1790 ret = -ENAMETOOLONG; in afs_symlink()
1791 if (dentry->d_name.len >= AFSNAMEMAX) in afs_symlink()
1794 ret = -EINVAL; in afs_symlink()
1798 op = afs_alloc_operation(NULL, dvnode->volume); in afs_symlink()
1807 op->file[0].dv_delta = 1; in afs_symlink()
1809 op->dentry = dentry; in afs_symlink()
1810 op->ops = &afs_symlink_operation; in afs_symlink()
1811 op->create.reason = afs_edit_dir_for_symlink; in afs_symlink()
1812 op->create.symlink = content; in afs_symlink()
1813 op->mtime = current_time(dir); in afs_symlink()
1826 struct afs_vnode *vnode = op->more_files[0].vnode; in afs_rename_success()
1827 struct afs_vnode *new_vnode = op->more_files[1].vnode; in afs_rename_success()
1829 _enter("op=%08x", op->debug_id); in afs_rename_success()
1831 op->ctime = op->file[0].scb.status.mtime_client; in afs_rename_success()
1832 afs_check_dir_conflict(op, &op->file[1]); in afs_rename_success()
1833 afs_vnode_commit_status(op, &op->file[0]); in afs_rename_success()
1834 if (op->file[1].vnode != op->file[0].vnode) { in afs_rename_success()
1835 op->ctime = op->file[1].scb.status.mtime_client; in afs_rename_success()
1836 afs_vnode_commit_status(op, &op->file[1]); in afs_rename_success()
1838 if (op->more_files[0].scb.have_status) in afs_rename_success()
1839 afs_vnode_commit_status(op, &op->more_files[0]); in afs_rename_success()
1840 if (op->more_files[1].scb.have_status) in afs_rename_success()
1841 afs_vnode_commit_status(op, &op->more_files[1]); in afs_rename_success()
1846 if (op->file[0].vnode != op->file[1].vnode) { in afs_rename_success()
1847 if (S_ISDIR(vnode->netfs.inode.i_mode)) { in afs_rename_success()
1850 write_seqlock(&vnode->cb_lock); in afs_rename_success()
1852 new_dv = vnode->status.data_version + 1; in afs_rename_success()
1854 vnode->status.data_version = new_dv; in afs_rename_success()
1855 inode_set_iversion_raw(&vnode->netfs.inode, new_dv); in afs_rename_success()
1857 write_sequnlock(&vnode->cb_lock); in afs_rename_success()
1860 if ((op->rename.rename_flags & RENAME_EXCHANGE) && in afs_rename_success()
1861 S_ISDIR(new_vnode->netfs.inode.i_mode)) { in afs_rename_success()
1864 write_seqlock(&new_vnode->cb_lock); in afs_rename_success()
1866 new_dv = new_vnode->status.data_version + 1; in afs_rename_success()
1867 new_vnode->status.data_version = new_dv; in afs_rename_success()
1868 inode_set_iversion_raw(&new_vnode->netfs.inode, new_dv); in afs_rename_success()
1870 write_sequnlock(&new_vnode->cb_lock); in afs_rename_success()
1878 struct afs_vnode_param *orig_dvp = &op->file[0]; in afs_rename_edit_dir()
1879 struct afs_vnode_param *new_dvp = &op->file[1]; in afs_rename_edit_dir()
1880 struct afs_vnode *orig_dvnode = orig_dvp->vnode; in afs_rename_edit_dir()
1881 struct afs_vnode *new_dvnode = new_dvp->vnode; in afs_rename_edit_dir()
1882 struct afs_vnode *vnode = AFS_FS_I(d_inode(op->dentry)); in afs_rename_edit_dir()
1883 struct dentry *old_dentry = op->dentry; in afs_rename_edit_dir()
1884 struct dentry *new_dentry = op->dentry_2; in afs_rename_edit_dir()
1887 _enter("op=%08x", op->debug_id); in afs_rename_edit_dir()
1889 if (op->rename.rehash) { in afs_rename_edit_dir()
1890 d_rehash(op->rename.rehash); in afs_rename_edit_dir()
1891 op->rename.rehash = NULL; in afs_rename_edit_dir()
1898 down_write(&orig_dvnode->validate_lock); in afs_rename_edit_dir()
1899 if (test_bit(AFS_VNODE_DIR_VALID, &orig_dvnode->flags) && in afs_rename_edit_dir()
1900 orig_dvnode->status.data_version == orig_dvp->dv_before + orig_dvp->dv_delta) in afs_rename_edit_dir()
1901 afs_edit_dir_remove(orig_dvnode, &old_dentry->d_name, in afs_rename_edit_dir()
1905 up_write(&orig_dvnode->validate_lock); in afs_rename_edit_dir()
1906 down_write(&new_dvnode->validate_lock); in afs_rename_edit_dir()
1909 if (test_bit(AFS_VNODE_DIR_VALID, &new_dvnode->flags) && in afs_rename_edit_dir()
1910 new_dvnode->status.data_version == new_dvp->dv_before + new_dvp->dv_delta) { in afs_rename_edit_dir()
1911 if (!op->rename.new_negative) in afs_rename_edit_dir()
1912 afs_edit_dir_remove(new_dvnode, &new_dentry->d_name, in afs_rename_edit_dir()
1915 afs_edit_dir_add(new_dvnode, &new_dentry->d_name, in afs_rename_edit_dir()
1916 &vnode->fid, afs_edit_dir_for_rename_2); in afs_rename_edit_dir()
1919 if (S_ISDIR(vnode->netfs.inode.i_mode) && in afs_rename_edit_dir()
1921 test_bit(AFS_VNODE_DIR_VALID, &vnode->flags)) in afs_rename_edit_dir()
1927 spin_lock(&new_inode->i_lock); in afs_rename_edit_dir()
1928 if (S_ISDIR(new_inode->i_mode)) in afs_rename_edit_dir()
1930 else if (new_inode->i_nlink > 0) in afs_rename_edit_dir()
1932 spin_unlock(&new_inode->i_lock); in afs_rename_edit_dir()
1938 afs_update_dentry_version(op, new_dvp, op->dentry); in afs_rename_edit_dir()
1939 afs_update_dentry_version(op, new_dvp, op->dentry_2); in afs_rename_edit_dir()
1943 up_write(&new_dvnode->validate_lock); in afs_rename_edit_dir()
1951 struct afs_vnode_param *orig_dvp = &op->file[0]; in afs_rename_exchange_edit_dir()
1952 struct afs_vnode_param *new_dvp = &op->file[1]; in afs_rename_exchange_edit_dir()
1953 struct afs_vnode *orig_dvnode = orig_dvp->vnode; in afs_rename_exchange_edit_dir()
1954 struct afs_vnode *new_dvnode = new_dvp->vnode; in afs_rename_exchange_edit_dir()
1955 struct afs_vnode *old_vnode = op->more_files[0].vnode; in afs_rename_exchange_edit_dir()
1956 struct afs_vnode *new_vnode = op->more_files[1].vnode; in afs_rename_exchange_edit_dir()
1957 struct dentry *old_dentry = op->dentry; in afs_rename_exchange_edit_dir()
1958 struct dentry *new_dentry = op->dentry_2; in afs_rename_exchange_edit_dir()
1960 _enter("op=%08x", op->debug_id); in afs_rename_exchange_edit_dir()
1963 down_write(&orig_dvnode->validate_lock); in afs_rename_exchange_edit_dir()
1964 if (test_bit(AFS_VNODE_DIR_VALID, &orig_dvnode->flags) && in afs_rename_exchange_edit_dir()
1965 orig_dvnode->status.data_version == orig_dvp->dv_before + orig_dvp->dv_delta) { in afs_rename_exchange_edit_dir()
1966 afs_edit_dir_update(orig_dvnode, &old_dentry->d_name, in afs_rename_exchange_edit_dir()
1968 afs_edit_dir_update(orig_dvnode, &new_dentry->d_name, in afs_rename_exchange_edit_dir()
1973 up_write(&orig_dvnode->validate_lock); in afs_rename_exchange_edit_dir()
1975 down_write(&orig_dvnode->validate_lock); in afs_rename_exchange_edit_dir()
1976 if (test_bit(AFS_VNODE_DIR_VALID, &orig_dvnode->flags) && in afs_rename_exchange_edit_dir()
1977 orig_dvnode->status.data_version == orig_dvp->dv_before + orig_dvp->dv_delta) in afs_rename_exchange_edit_dir()
1978 afs_edit_dir_update(orig_dvnode, &old_dentry->d_name, in afs_rename_exchange_edit_dir()
1981 up_write(&orig_dvnode->validate_lock); in afs_rename_exchange_edit_dir()
1982 down_write(&new_dvnode->validate_lock); in afs_rename_exchange_edit_dir()
1984 if (test_bit(AFS_VNODE_DIR_VALID, &new_dvnode->flags) && in afs_rename_exchange_edit_dir()
1985 new_dvnode->status.data_version == new_dvp->dv_before + new_dvp->dv_delta) in afs_rename_exchange_edit_dir()
1986 afs_edit_dir_update(new_dvnode, &new_dentry->d_name, in afs_rename_exchange_edit_dir()
1989 if (S_ISDIR(old_vnode->netfs.inode.i_mode) && in afs_rename_exchange_edit_dir()
1990 test_bit(AFS_VNODE_DIR_VALID, &old_vnode->flags)) in afs_rename_exchange_edit_dir()
1994 if (S_ISDIR(new_vnode->netfs.inode.i_mode) && in afs_rename_exchange_edit_dir()
1995 test_bit(AFS_VNODE_DIR_VALID, &new_vnode->flags)) in afs_rename_exchange_edit_dir()
2006 up_write(&new_dvnode->validate_lock); in afs_rename_exchange_edit_dir()
2012 _enter("op=%08x", op->debug_id); in afs_rename_put()
2013 if (op->rename.rehash) in afs_rename_put()
2014 d_rehash(op->rename.rehash); in afs_rename_put()
2015 dput(op->rename.tmp); in afs_rename_put()
2017 d_rehash(op->dentry); in afs_rename_put()
2066 return -EINVAL; in afs_rename()
2068 /* Don't allow silly-rename files be moved around. */ in afs_rename()
2069 if (old_dentry->d_flags & DCACHE_NFSFS_RENAMED) in afs_rename()
2070 return -EINVAL; in afs_rename()
2079 orig_dvnode->fid.vid, orig_dvnode->fid.vnode, in afs_rename()
2080 vnode->fid.vid, vnode->fid.vnode, in afs_rename()
2081 new_dvnode->fid.vid, new_dvnode->fid.vnode, in afs_rename()
2084 op = afs_alloc_operation(NULL, orig_dvnode->volume); in afs_rename()
2092 ret = afs_validate(vnode, op->key); in afs_rename()
2097 ret = -ENOMEM; in afs_rename()
2098 op->more_files = kvcalloc(2, sizeof(struct afs_vnode_param), GFP_KERNEL); in afs_rename()
2099 if (!op->more_files) in afs_rename()
2104 op->file[0].dv_delta = 1; in afs_rename()
2105 op->file[1].dv_delta = 1; in afs_rename()
2106 op->file[0].modification = true; in afs_rename()
2107 op->file[1].modification = true; in afs_rename()
2108 op->file[0].update_ctime = true; in afs_rename()
2109 op->file[1].update_ctime = true; in afs_rename()
2110 op->more_files[0].vnode = vnode; in afs_rename()
2111 op->more_files[0].speculative = true; in afs_rename()
2112 op->more_files[1].vnode = new_vnode; in afs_rename()
2113 op->more_files[1].speculative = true; in afs_rename()
2114 op->nr_files = 4; in afs_rename()
2116 op->dentry = old_dentry; in afs_rename()
2117 op->dentry_2 = new_dentry; in afs_rename()
2118 op->rename.rename_flags = flags; in afs_rename()
2119 op->rename.new_negative = d_is_negative(new_dentry); in afs_rename()
2122 op->ops = &afs_rename_noreplace_operation; in afs_rename()
2124 op->ops = &afs_rename_exchange_operation; in afs_rename()
2130 op->ops = &afs_rename_operation; in afs_rename()
2132 /* For non-directories, check whether the target is busy and if in afs_rename()
2133 * so, make a copy of the dentry and then do a silly-rename. in afs_rename()
2134 * If the silly-rename succeeds, the copied dentry is hashed in afs_rename()
2143 op->rename.rehash = new_dentry; in afs_rename()
2148 op->rename.tmp = d_alloc(new_dentry->d_parent, in afs_rename()
2149 &new_dentry->d_name); in afs_rename()
2150 if (!op->rename.tmp) { in afs_rename()
2157 new_dentry, op->key); in afs_rename()
2163 op->dentry_2 = op->rename.tmp; in afs_rename()
2164 op->rename.rehash = NULL; in afs_rename()
2165 op->rename.new_negative = true; in afs_rename()
2177 * lookup instead - which we hold a lock against. in afs_rename()
2182 if (ret == -ENOTSUPP) in afs_rename()
2183 ret = -EINVAL; in afs_rename()
2201 struct afs_vnode *dvnode = AFS_FS_I(mapping->host); in afs_single_writepages()
2203 bool is_dir = (S_ISDIR(dvnode->netfs.inode.i_mode) && in afs_single_writepages()
2204 !test_bit(AFS_VNODE_MOUNTPOINT, &dvnode->flags)); in afs_single_writepages()
2210 down_read(&dvnode->validate_lock); in afs_single_writepages()
2213 test_bit(AFS_VNODE_DIR_VALID, &dvnode->flags) : in afs_single_writepages()
2214 atomic64_read(&dvnode->cb_expires_at) != AFS_NO_CB_PROMISE) { in afs_single_writepages()
2215 iov_iter_folio_queue(&iter, ITER_SOURCE, dvnode->directory, 0, 0, in afs_single_writepages()
2216 i_size_read(&dvnode->netfs.inode)); in afs_single_writepages()
2220 up_read(&dvnode->validate_lock); in afs_single_writepages()