Lines Matching refs:dir
59 static int nfs_do_create(struct inode *dir, struct dentry *dentry,
78 alloc_nfs_open_dir_context(struct inode *dir) in alloc_nfs_open_dir_context() argument
80 struct nfs_inode *nfsi = NFS_I(dir); in alloc_nfs_open_dir_context()
87 spin_lock(&dir->i_lock); in alloc_nfs_open_dir_context()
90 nfs_set_cache_invalid(dir, in alloc_nfs_open_dir_context()
95 spin_unlock(&dir->i_lock); in alloc_nfs_open_dir_context()
101 static void put_nfs_open_dir_context(struct inode *dir, struct nfs_open_dir_context *ctx) in put_nfs_open_dir_context() argument
103 spin_lock(&dir->i_lock); in put_nfs_open_dir_context()
105 spin_unlock(&dir->i_lock); in put_nfs_open_dir_context()
663 static bool nfs_use_readdirplus(struct inode *dir, struct dir_context *ctx, in nfs_use_readdirplus() argument
667 if (!nfs_server_capable(dir, NFS_CAP_READDIRPLUS)) in nfs_use_readdirplus()
669 if (NFS_SERVER(dir)->flags & NFS_MOUNT_FORCE_RDIRPLUS) in nfs_use_readdirplus()
682 void nfs_readdir_record_entry_cache_hit(struct inode *dir) in nfs_readdir_record_entry_cache_hit() argument
684 struct nfs_inode *nfsi = NFS_I(dir); in nfs_readdir_record_entry_cache_hit()
687 if (nfs_server_capable(dir, NFS_CAP_READDIRPLUS) && in nfs_readdir_record_entry_cache_hit()
688 S_ISDIR(dir->i_mode)) { in nfs_readdir_record_entry_cache_hit()
701 void nfs_readdir_record_entry_cache_miss(struct inode *dir) in nfs_readdir_record_entry_cache_miss() argument
703 struct nfs_inode *nfsi = NFS_I(dir); in nfs_readdir_record_entry_cache_miss()
706 if (nfs_server_capable(dir, NFS_CAP_READDIRPLUS) && in nfs_readdir_record_entry_cache_miss()
707 S_ISDIR(dir->i_mode)) { in nfs_readdir_record_entry_cache_miss()
715 static void nfs_lookup_advise_force_readdirplus(struct inode *dir, in nfs_lookup_advise_force_readdirplus() argument
718 if (nfs_server_capable(dir, NFS_CAP_CASE_INSENSITIVE)) in nfs_lookup_advise_force_readdirplus()
722 nfs_readdir_record_entry_cache_miss(dir); in nfs_lookup_advise_force_readdirplus()
1393 void nfs_force_lookup_revalidate(struct inode *dir) in nfs_force_lookup_revalidate() argument
1395 NFS_I(dir)->cache_change_attribute += 2; in nfs_force_lookup_revalidate()
1408 static bool nfs_verify_change_attribute(struct inode *dir, unsigned long verf) in nfs_verify_change_attribute() argument
1410 return (verf & ~1UL) == nfs_save_change_attribute(dir); in nfs_verify_change_attribute()
1438 struct inode *dir = d_inode_rcu(dentry->d_parent); in nfs_set_verifier_locked() local
1440 if (!dir || !nfs_verify_change_attribute(dir, verf)) in nfs_set_verifier_locked()
1494 static int nfs_dentry_verify_change(struct inode *dir, struct dentry *dentry) in nfs_dentry_verify_change() argument
1496 if (nfs_server_capable(dir, NFS_CAP_CASE_INSENSITIVE) && in nfs_dentry_verify_change()
1498 return dentry->d_time == inode_peek_iversion_raw(dir); in nfs_dentry_verify_change()
1499 return nfs_verify_change_attribute(dir, dentry->d_time); in nfs_dentry_verify_change()
1508 static int nfs_check_verifier(struct inode *dir, struct dentry *dentry, in nfs_check_verifier() argument
1513 if (NFS_SERVER(dir)->flags & NFS_MOUNT_LOOKUP_CACHE_NONE) in nfs_check_verifier()
1515 if (!nfs_dentry_verify_change(dir, dentry)) in nfs_check_verifier()
1518 if (nfs_mapping_need_revalidate_inode(dir)) { in nfs_check_verifier()
1521 if (__nfs_revalidate_inode(NFS_SERVER(dir), dir) < 0) in nfs_check_verifier()
1524 if (!nfs_dentry_verify_change(dir, dentry)) in nfs_check_verifier()
1533 static int nfs_is_exclusive_create(struct inode *dir, unsigned int flags) in nfs_is_exclusive_create() argument
1535 if (NFS_PROTO(dir)->version == 2) in nfs_is_exclusive_create()
1613 int nfs_neg_need_reval(struct inode *dir, struct dentry *dentry, in nfs_neg_need_reval() argument
1618 if (NFS_SERVER(dir)->flags & NFS_MOUNT_LOOKUP_CACHE_NONEG) in nfs_neg_need_reval()
1621 if (nfs_server_capable(dir, NFS_CAP_CASE_INSENSITIVE)) in nfs_neg_need_reval()
1623 return !nfs_check_verifier(dir, dentry, flags & LOOKUP_RCU); in nfs_neg_need_reval()
1627 nfs_lookup_revalidate_done(struct inode *dir, struct dentry *dentry, in nfs_lookup_revalidate_done() argument
1653 trace_nfs_lookup_revalidate_exit(dir, dentry, 0, error); in nfs_lookup_revalidate_done()
1658 nfs_lookup_revalidate_negative(struct inode *dir, struct dentry *dentry, in nfs_lookup_revalidate_negative() argument
1662 if (nfs_neg_need_reval(dir, dentry, flags)) { in nfs_lookup_revalidate_negative()
1667 return nfs_lookup_revalidate_done(dir, dentry, NULL, ret); in nfs_lookup_revalidate_negative()
1671 nfs_lookup_revalidate_delegated(struct inode *dir, struct dentry *dentry, in nfs_lookup_revalidate_delegated() argument
1674 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_lookup_revalidate_delegated()
1675 return nfs_lookup_revalidate_done(dir, dentry, inode, 1); in nfs_lookup_revalidate_delegated()
1678 static int nfs_lookup_revalidate_dentry(struct inode *dir, const struct qstr *name, in nfs_lookup_revalidate_dentry() argument
1687 trace_nfs_lookup_revalidate_enter(dir, dentry, flags); in nfs_lookup_revalidate_dentry()
1695 dir_verifier = nfs_save_change_attribute(dir); in nfs_lookup_revalidate_dentry()
1696 ret = NFS_PROTO(dir)->lookup(dir, dentry, name, fhandle, fattr); in nfs_lookup_revalidate_dentry()
1701 nfs_lookup_advise_force_readdirplus(dir, flags); in nfs_lookup_revalidate_dentry()
1721 if (!ret && nfs_dentry_verify_change(dir, dentry)) in nfs_lookup_revalidate_dentry()
1722 nfs_mark_dir_for_revalidate(dir); in nfs_lookup_revalidate_dentry()
1723 return nfs_lookup_revalidate_done(dir, dentry, inode, ret); in nfs_lookup_revalidate_dentry()
1738 nfs_do_lookup_revalidate(struct inode *dir, const struct qstr *name, in nfs_do_lookup_revalidate() argument
1744 nfs_inc_stats(dir, NFSIOS_DENTRYREVALIDATE); in nfs_do_lookup_revalidate()
1748 return nfs_lookup_revalidate_negative(dir, dentry, flags); in nfs_do_lookup_revalidate()
1757 nfs_server_capable(dir, NFS_CAP_CASE_INSENSITIVE)) in nfs_do_lookup_revalidate()
1761 return nfs_lookup_revalidate_delegated(dir, dentry, inode); in nfs_do_lookup_revalidate()
1765 nfs_check_verifier(dir, dentry, flags & LOOKUP_RCU)) { in nfs_do_lookup_revalidate()
1769 nfs_mark_dir_for_revalidate(dir); in nfs_do_lookup_revalidate()
1781 return nfs_lookup_revalidate_dentry(dir, name, dentry, inode, flags); in nfs_do_lookup_revalidate()
1783 return nfs_lookup_revalidate_done(dir, dentry, inode, 1); in nfs_do_lookup_revalidate()
1787 return nfs_lookup_revalidate_done(dir, dentry, inode, error); in nfs_do_lookup_revalidate()
1805 static int nfs_lookup_revalidate(struct inode *dir, const struct qstr *name, in nfs_lookup_revalidate() argument
1810 return nfs_do_lookup_revalidate(dir, name, dentry, flags); in nfs_lookup_revalidate()
1944 struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, unsigned int flags) in nfs_lookup() argument
1954 nfs_inc_stats(dir, NFSIOS_VFSLOOKUP); in nfs_lookup()
1956 if (unlikely(dentry->d_name.len > NFS_SERVER(dir)->namelen)) in nfs_lookup()
1963 if (nfs_is_exclusive_create(dir, flags) || flags & LOOKUP_RENAME_TARGET) in nfs_lookup()
1968 fattr = nfs_alloc_fattr_with_label(NFS_SERVER(dir)); in nfs_lookup()
1972 dir_verifier = nfs_save_change_attribute(dir); in nfs_lookup()
1973 trace_nfs_lookup_enter(dir, dentry, flags); in nfs_lookup()
1974 error = NFS_PROTO(dir)->lookup(dir, dentry, &dentry->d_name, in nfs_lookup()
1977 if (nfs_server_capable(dir, NFS_CAP_CASE_INSENSITIVE)) in nfs_lookup()
1978 dir_verifier = inode_peek_iversion_raw(dir); in nfs_lookup()
1991 nfs_lookup_advise_force_readdirplus(dir, flags); in nfs_lookup()
2002 trace_nfs_lookup_exit(dir, dentry, flags, PTR_ERR_OR_ZERO(res)); in nfs_lookup()
2059 int nfs_atomic_open(struct inode *dir, struct dentry *dentry, in nfs_atomic_open() argument
2078 dir->i_sb->s_id, dir->i_ino, dentry); in nfs_atomic_open()
2098 if (dentry->d_name.len > NFS_SERVER(dir)->namelen) in nfs_atomic_open()
2102 struct nfs_server *server = NFS_SERVER(dir); in nfs_atomic_open()
2131 trace_nfs_atomic_open_enter(dir, ctx, open_flags); in nfs_atomic_open()
2132 inode = NFS_PROTO(dir)->open_context(dir, ctx, open_flags, &attr, &created); in nfs_atomic_open()
2137 trace_nfs_atomic_open_exit(dir, ctx, open_flags, err); in nfs_atomic_open()
2143 if (nfs_server_capable(dir, NFS_CAP_CASE_INSENSITIVE)) in nfs_atomic_open()
2144 dir_verifier = inode_peek_iversion_raw(dir); in nfs_atomic_open()
2146 dir_verifier = nfs_save_change_attribute(dir); in nfs_atomic_open()
2165 trace_nfs_atomic_open_exit(dir, ctx, open_flags, err); in nfs_atomic_open()
2175 res = nfs_lookup(dir, dentry, lookup_flags); in nfs_atomic_open()
2208 nfs4_lookup_revalidate(struct inode *dir, const struct qstr *name, in nfs4_lookup_revalidate() argument
2216 trace_nfs_lookup_revalidate_enter(dir, dentry, flags); in nfs4_lookup_revalidate()
2232 return nfs_lookup_revalidate_delegated(dir, dentry, inode); in nfs4_lookup_revalidate()
2243 if (!nfs_check_verifier(dir, dentry, flags & LOOKUP_RCU)) in nfs4_lookup_revalidate()
2251 return nfs_lookup_revalidate_dentry(dir, name, dentry, inode, flags); in nfs4_lookup_revalidate()
2254 return nfs_do_lookup_revalidate(dir, name, dentry, flags); in nfs4_lookup_revalidate()
2259 int nfs_atomic_open_v23(struct inode *dir, struct dentry *dentry, in nfs_atomic_open_v23() argument
2269 if (dentry->d_name.len > NFS_SERVER(dir)->namelen) in nfs_atomic_open_v23()
2274 error = nfs_do_create(dir, dentry, mode, open_flags); in nfs_atomic_open_v23()
2283 struct dentry *res = nfs_lookup(dir, dentry, 0); in nfs_atomic_open_v23()
2302 struct inode *dir = d_inode(parent); in nfs_add_or_obtain() local
2310 error = NFS_PROTO(dir)->lookup(dir, dentry, &dentry->d_name, in nfs_add_or_obtain()
2315 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_add_or_obtain()
2358 static int nfs_do_create(struct inode *dir, struct dentry *dentry, in nfs_do_create() argument
2367 dir->i_sb->s_id, dir->i_ino, dentry); in nfs_do_create()
2376 trace_nfs_create_enter(dir, dentry, open_flags); in nfs_do_create()
2377 error = NFS_PROTO(dir)->create(dir, dentry, &attr, open_flags); in nfs_do_create()
2378 trace_nfs_create_exit(dir, dentry, open_flags, error); in nfs_do_create()
2387 int nfs_create(struct mnt_idmap *idmap, struct inode *dir, in nfs_create() argument
2390 return nfs_do_create(dir, dentry, mode, excl ? O_EXCL : 0); in nfs_create()
2398 nfs_mknod(struct mnt_idmap *idmap, struct inode *dir, in nfs_mknod() argument
2405 dir->i_sb->s_id, dir->i_ino, dentry); in nfs_mknod()
2410 trace_nfs_mknod_enter(dir, dentry); in nfs_mknod()
2411 status = NFS_PROTO(dir)->mknod(dir, dentry, &attr, rdev); in nfs_mknod()
2412 trace_nfs_mknod_exit(dir, dentry, status); in nfs_mknod()
2425 struct dentry *nfs_mkdir(struct mnt_idmap *idmap, struct inode *dir, in nfs_mkdir() argument
2432 dir->i_sb->s_id, dir->i_ino, dentry); in nfs_mkdir()
2437 trace_nfs_mkdir_enter(dir, dentry); in nfs_mkdir()
2438 ret = NFS_PROTO(dir)->mkdir(dir, dentry, &attr); in nfs_mkdir()
2439 trace_nfs_mkdir_exit(dir, dentry, PTR_ERR_OR_ZERO(ret)); in nfs_mkdir()
2450 static void nfs_dentry_remove_handle_error(struct inode *dir, in nfs_dentry_remove_handle_error() argument
2457 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_dentry_remove_handle_error()
2461 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_dentry_remove_handle_error()
2465 int nfs_rmdir(struct inode *dir, struct dentry *dentry) in nfs_rmdir() argument
2470 dir->i_sb->s_id, dir->i_ino, dentry); in nfs_rmdir()
2472 trace_nfs_rmdir_enter(dir, dentry); in nfs_rmdir()
2475 error = NFS_PROTO(dir)->rmdir(dir, &dentry->d_name); in nfs_rmdir()
2486 error = NFS_PROTO(dir)->rmdir(dir, &dentry->d_name); in nfs_rmdir()
2487 nfs_dentry_remove_handle_error(dir, dentry, error); in nfs_rmdir()
2488 trace_nfs_rmdir_exit(dir, dentry, error); in nfs_rmdir()
2503 struct inode *dir = d_inode(dentry->d_parent); in nfs_safe_remove() local
2515 trace_nfs_remove_enter(dir, dentry); in nfs_safe_remove()
2517 error = NFS_PROTO(dir)->remove(dir, dentry); in nfs_safe_remove()
2521 error = NFS_PROTO(dir)->remove(dir, dentry); in nfs_safe_remove()
2524 trace_nfs_remove_exit(dir, dentry, error); in nfs_safe_remove()
2534 int nfs_unlink(struct inode *dir, struct dentry *dentry) in nfs_unlink() argument
2538 dfprintk(VFS, "NFS: unlink(%s/%lu, %pd)\n", dir->i_sb->s_id, in nfs_unlink()
2539 dir->i_ino, dentry); in nfs_unlink()
2541 trace_nfs_unlink_enter(dir, dentry); in nfs_unlink()
2548 error = nfs_sillyrename(dir, dentry); in nfs_unlink()
2566 nfs_dentry_remove_handle_error(dir, dentry, error); in nfs_unlink()
2569 trace_nfs_unlink_exit(dir, dentry, error); in nfs_unlink()
2589 int nfs_symlink(struct mnt_idmap *idmap, struct inode *dir, in nfs_symlink() argument
2598 dfprintk(VFS, "NFS: symlink(%s/%lu, %pd, %s)\n", dir->i_sb->s_id, in nfs_symlink()
2599 dir->i_ino, dentry, symname); in nfs_symlink()
2616 trace_nfs_symlink_enter(dir, dentry); in nfs_symlink()
2617 error = NFS_PROTO(dir)->symlink(dir, dentry, folio, pathlen, &attr); in nfs_symlink()
2618 trace_nfs_symlink_exit(dir, dentry, error); in nfs_symlink()
2621 dir->i_sb->s_id, dir->i_ino, in nfs_symlink()
2628 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_symlink()
2646 nfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry) in nfs_link() argument
2654 trace_nfs_link_enter(inode, dir, dentry); in nfs_link()
2658 error = NFS_PROTO(dir)->link(inode, dir, &dentry->d_name); in nfs_link()
2660 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_link()
2664 trace_nfs_link_exit(inode, dir, dentry, error); in nfs_link()