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()
86 ctx->dtsize = min(NFS_SERVER(dir)->dtsize, NFS_INIT_DTSIZE); 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()
1394 void nfs_force_lookup_revalidate(struct inode *dir) in nfs_force_lookup_revalidate() argument
1396 NFS_I(dir)->cache_change_attribute += 2; in nfs_force_lookup_revalidate()
1409 static bool nfs_verify_change_attribute(struct inode *dir, unsigned long verf) in nfs_verify_change_attribute() argument
1411 return (verf & ~1UL) == nfs_save_change_attribute(dir); in nfs_verify_change_attribute()
1439 struct inode *dir = d_inode_rcu(dentry->d_parent); in nfs_set_verifier_locked() local
1441 if (!dir || !nfs_verify_change_attribute(dir, verf)) in nfs_set_verifier_locked()
1443 if (NFS_PROTO(dir)->have_delegation(dir, FMODE_READ, 0) || in nfs_set_verifier_locked()
1472 struct inode *dir; in nfs_clear_verifier_file() local
1476 dir = d_inode_rcu(alias->d_parent); in nfs_clear_verifier_file()
1477 if (!dir || in nfs_clear_verifier_file()
1478 !NFS_PROTO(dir)->have_delegation(dir, FMODE_READ, 0)) in nfs_clear_verifier_file()
1484 static void nfs_clear_verifier_directory(struct inode *dir) in nfs_clear_verifier_directory() argument
1490 if (hlist_empty(&dir->i_dentry)) in nfs_clear_verifier_directory()
1493 hlist_entry(dir->i_dentry.first, struct dentry, d_u.d_alias); in nfs_clear_verifier_directory()
1536 static int nfs_dentry_verify_change(struct inode *dir, struct dentry *dentry) in nfs_dentry_verify_change() argument
1538 if (nfs_server_capable(dir, NFS_CAP_CASE_INSENSITIVE) && in nfs_dentry_verify_change()
1540 return dentry->d_time == inode_peek_iversion_raw(dir); in nfs_dentry_verify_change()
1541 return nfs_verify_change_attribute(dir, dentry->d_time); in nfs_dentry_verify_change()
1550 static int nfs_check_verifier(struct inode *dir, struct dentry *dentry, in nfs_check_verifier() argument
1555 if (NFS_SERVER(dir)->flags & NFS_MOUNT_LOOKUP_CACHE_NONE) in nfs_check_verifier()
1557 if (!nfs_dentry_verify_change(dir, dentry)) in nfs_check_verifier()
1561 if (nfs_mapping_need_revalidate_inode(dir)) { in nfs_check_verifier()
1564 if (__nfs_revalidate_inode(NFS_SERVER(dir), dir) < 0) in nfs_check_verifier()
1567 if (!nfs_dentry_verify_change(dir, dentry)) in nfs_check_verifier()
1576 static int nfs_is_exclusive_create(struct inode *dir, unsigned int flags) in nfs_is_exclusive_create() argument
1578 if (NFS_PROTO(dir)->version == 2) in nfs_is_exclusive_create()
1656 int nfs_neg_need_reval(struct inode *dir, struct dentry *dentry, in nfs_neg_need_reval() argument
1661 if (NFS_SERVER(dir)->flags & NFS_MOUNT_LOOKUP_CACHE_NONEG) in nfs_neg_need_reval()
1664 if (nfs_server_capable(dir, NFS_CAP_CASE_INSENSITIVE)) in nfs_neg_need_reval()
1666 return !nfs_check_verifier(dir, dentry, flags & LOOKUP_RCU); in nfs_neg_need_reval()
1670 nfs_lookup_revalidate_done(struct inode *dir, struct dentry *dentry, in nfs_lookup_revalidate_done() argument
1696 trace_nfs_lookup_revalidate_exit(dir, dentry, 0, error); in nfs_lookup_revalidate_done()
1701 nfs_lookup_revalidate_negative(struct inode *dir, struct dentry *dentry, in nfs_lookup_revalidate_negative() argument
1705 if (nfs_neg_need_reval(dir, dentry, flags)) { in nfs_lookup_revalidate_negative()
1710 return nfs_lookup_revalidate_done(dir, dentry, NULL, ret); in nfs_lookup_revalidate_negative()
1714 nfs_lookup_revalidate_delegated(struct inode *dir, struct dentry *dentry, in nfs_lookup_revalidate_delegated() argument
1717 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_lookup_revalidate_delegated()
1718 return nfs_lookup_revalidate_done(dir, dentry, inode, 1); in nfs_lookup_revalidate_delegated()
1721 static int nfs_lookup_revalidate_dentry(struct inode *dir, const struct qstr *name, in nfs_lookup_revalidate_dentry() argument
1730 trace_nfs_lookup_revalidate_enter(dir, dentry, flags); in nfs_lookup_revalidate_dentry()
1738 dir_verifier = nfs_save_change_attribute(dir); in nfs_lookup_revalidate_dentry()
1739 ret = NFS_PROTO(dir)->lookup(dir, dentry, name, fhandle, fattr); in nfs_lookup_revalidate_dentry()
1744 nfs_lookup_advise_force_readdirplus(dir, flags); in nfs_lookup_revalidate_dentry()
1764 if (!ret && nfs_dentry_verify_change(dir, dentry)) in nfs_lookup_revalidate_dentry()
1765 nfs_mark_dir_for_revalidate(dir); in nfs_lookup_revalidate_dentry()
1766 return nfs_lookup_revalidate_done(dir, dentry, inode, ret); in nfs_lookup_revalidate_dentry()
1781 nfs_do_lookup_revalidate(struct inode *dir, const struct qstr *name, in nfs_do_lookup_revalidate() argument
1787 nfs_inc_stats(dir, NFSIOS_DENTRYREVALIDATE); in nfs_do_lookup_revalidate()
1791 return nfs_lookup_revalidate_negative(dir, dentry, flags); in nfs_do_lookup_revalidate()
1800 nfs_server_capable(dir, NFS_CAP_CASE_INSENSITIVE)) in nfs_do_lookup_revalidate()
1804 return nfs_lookup_revalidate_delegated(dir, dentry, inode); in nfs_do_lookup_revalidate()
1808 nfs_check_verifier(dir, dentry, flags & LOOKUP_RCU)) { in nfs_do_lookup_revalidate()
1812 nfs_mark_dir_for_revalidate(dir); in nfs_do_lookup_revalidate()
1824 return nfs_lookup_revalidate_dentry(dir, name, dentry, inode, flags); in nfs_do_lookup_revalidate()
1826 return nfs_lookup_revalidate_done(dir, dentry, inode, 1); in nfs_do_lookup_revalidate()
1830 return nfs_lookup_revalidate_done(dir, dentry, inode, error); in nfs_do_lookup_revalidate()
1848 static int nfs_lookup_revalidate(struct inode *dir, const struct qstr *name, in nfs_lookup_revalidate() argument
1853 return nfs_do_lookup_revalidate(dir, name, dentry, flags); in nfs_lookup_revalidate()
1990 struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, unsigned int flags) in nfs_lookup() argument
2000 nfs_inc_stats(dir, NFSIOS_VFSLOOKUP); in nfs_lookup()
2002 if (unlikely(dentry->d_name.len > NFS_SERVER(dir)->namelen)) in nfs_lookup()
2009 if (nfs_is_exclusive_create(dir, flags) || flags & LOOKUP_RENAME_TARGET) in nfs_lookup()
2014 fattr = nfs_alloc_fattr_with_label(NFS_SERVER(dir)); in nfs_lookup()
2018 dir_verifier = nfs_save_change_attribute(dir); in nfs_lookup()
2019 trace_nfs_lookup_enter(dir, dentry, flags); in nfs_lookup()
2020 error = NFS_PROTO(dir)->lookup(dir, dentry, &dentry->d_name, in nfs_lookup()
2023 if (nfs_server_capable(dir, NFS_CAP_CASE_INSENSITIVE)) in nfs_lookup()
2024 dir_verifier = inode_peek_iversion_raw(dir); in nfs_lookup()
2037 nfs_lookup_advise_force_readdirplus(dir, flags); in nfs_lookup()
2049 trace_nfs_lookup_exit(dir, dentry, flags, PTR_ERR_OR_ZERO(res)); in nfs_lookup()
2106 int nfs_atomic_open(struct inode *dir, struct dentry *dentry, in nfs_atomic_open() argument
2125 dir->i_sb->s_id, dir->i_ino, dentry); in nfs_atomic_open()
2145 if (dentry->d_name.len > NFS_SERVER(dir)->namelen) in nfs_atomic_open()
2149 struct nfs_server *server = NFS_SERVER(dir); in nfs_atomic_open()
2178 trace_nfs_atomic_open_enter(dir, ctx, open_flags); in nfs_atomic_open()
2179 inode = NFS_PROTO(dir)->open_context(dir, ctx, open_flags, &attr, &created); in nfs_atomic_open()
2184 trace_nfs_atomic_open_exit(dir, ctx, open_flags, err); in nfs_atomic_open()
2189 if (nfs_server_capable(dir, NFS_CAP_CASE_INSENSITIVE)) in nfs_atomic_open()
2190 dir_verifier = inode_peek_iversion_raw(dir); in nfs_atomic_open()
2192 dir_verifier = nfs_save_change_attribute(dir); in nfs_atomic_open()
2212 trace_nfs_atomic_open_exit(dir, ctx, open_flags, err); in nfs_atomic_open()
2222 res = nfs_lookup(dir, dentry, lookup_flags); in nfs_atomic_open()
2253 nfs4_lookup_revalidate(struct inode *dir, const struct qstr *name, in nfs4_lookup_revalidate() argument
2261 trace_nfs_lookup_revalidate_enter(dir, dentry, flags); in nfs4_lookup_revalidate()
2278 return nfs_lookup_revalidate_delegated(dir, dentry, inode); in nfs4_lookup_revalidate()
2289 if (!nfs_check_verifier(dir, dentry, flags & LOOKUP_RCU)) in nfs4_lookup_revalidate()
2297 return nfs_lookup_revalidate_dentry(dir, name, dentry, inode, flags); in nfs4_lookup_revalidate()
2300 return nfs_do_lookup_revalidate(dir, name, dentry, flags); in nfs4_lookup_revalidate()
2305 int nfs_atomic_open_v23(struct inode *dir, struct dentry *dentry, in nfs_atomic_open_v23() argument
2315 if (dentry->d_name.len > NFS_SERVER(dir)->namelen) in nfs_atomic_open_v23()
2319 error = nfs_do_create(dir, dentry, mode, open_flags); in nfs_atomic_open_v23()
2331 res = nfs_lookup(dir, dentry, 0); in nfs_atomic_open_v23()
2343 struct inode *dir = d_inode(parent); in nfs_add_or_obtain() local
2351 error = NFS_PROTO(dir)->lookup(dir, dentry, &dentry->d_name, in nfs_add_or_obtain()
2356 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_add_or_obtain()
2399 static int nfs_do_create(struct inode *dir, struct dentry *dentry, in nfs_do_create() argument
2408 dir->i_sb->s_id, dir->i_ino, dentry); in nfs_do_create()
2417 trace_nfs_create_enter(dir, dentry, open_flags); in nfs_do_create()
2418 error = NFS_PROTO(dir)->create(dir, dentry, &attr, open_flags); in nfs_do_create()
2419 trace_nfs_create_exit(dir, dentry, open_flags, error); in nfs_do_create()
2428 int nfs_create(struct mnt_idmap *idmap, struct inode *dir, in nfs_create() argument
2431 return nfs_do_create(dir, dentry, mode, excl ? O_EXCL : 0); in nfs_create()
2439 nfs_mknod(struct mnt_idmap *idmap, struct inode *dir, in nfs_mknod() argument
2446 dir->i_sb->s_id, dir->i_ino, dentry); in nfs_mknod()
2451 trace_nfs_mknod_enter(dir, dentry); in nfs_mknod()
2452 status = NFS_PROTO(dir)->mknod(dir, dentry, &attr, rdev); in nfs_mknod()
2453 trace_nfs_mknod_exit(dir, dentry, status); in nfs_mknod()
2466 struct dentry *nfs_mkdir(struct mnt_idmap *idmap, struct inode *dir, in nfs_mkdir() argument
2473 dir->i_sb->s_id, dir->i_ino, dentry); in nfs_mkdir()
2478 trace_nfs_mkdir_enter(dir, dentry); in nfs_mkdir()
2479 ret = NFS_PROTO(dir)->mkdir(dir, dentry, &attr); in nfs_mkdir()
2480 trace_nfs_mkdir_exit(dir, dentry, PTR_ERR_OR_ZERO(ret)); in nfs_mkdir()
2491 static void nfs_dentry_remove_handle_error(struct inode *dir, in nfs_dentry_remove_handle_error() argument
2498 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_dentry_remove_handle_error()
2502 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_dentry_remove_handle_error()
2506 int nfs_rmdir(struct inode *dir, struct dentry *dentry) in nfs_rmdir() argument
2511 dir->i_sb->s_id, dir->i_ino, dentry); in nfs_rmdir()
2513 trace_nfs_rmdir_enter(dir, dentry); in nfs_rmdir()
2516 error = NFS_PROTO(dir)->rmdir(dir, &dentry->d_name); in nfs_rmdir()
2527 error = NFS_PROTO(dir)->rmdir(dir, &dentry->d_name); in nfs_rmdir()
2528 nfs_dentry_remove_handle_error(dir, dentry, error); in nfs_rmdir()
2529 trace_nfs_rmdir_exit(dir, dentry, error); in nfs_rmdir()
2544 struct inode *dir = d_inode(dentry->d_parent); in nfs_safe_remove() local
2556 trace_nfs_remove_enter(dir, dentry); in nfs_safe_remove()
2560 error = NFS_PROTO(dir)->remove(dir, dentry); in nfs_safe_remove()
2564 error = NFS_PROTO(dir)->remove(dir, dentry); in nfs_safe_remove()
2567 trace_nfs_remove_exit(dir, dentry, error); in nfs_safe_remove()
2577 int nfs_unlink(struct inode *dir, struct dentry *dentry) in nfs_unlink() argument
2581 dfprintk(VFS, "NFS: unlink(%s/%lu, %pd)\n", dir->i_sb->s_id, in nfs_unlink()
2582 dir->i_ino, dentry); in nfs_unlink()
2584 trace_nfs_unlink_enter(dir, dentry); in nfs_unlink()
2591 error = nfs_sillyrename(dir, dentry); in nfs_unlink()
2609 nfs_dentry_remove_handle_error(dir, dentry, error); in nfs_unlink()
2612 trace_nfs_unlink_exit(dir, dentry, error); in nfs_unlink()
2632 int nfs_symlink(struct mnt_idmap *idmap, struct inode *dir, in nfs_symlink() argument
2641 dfprintk(VFS, "NFS: symlink(%s/%lu, %pd, %s)\n", dir->i_sb->s_id, in nfs_symlink()
2642 dir->i_ino, dentry, symname); in nfs_symlink()
2659 trace_nfs_symlink_enter(dir, dentry); in nfs_symlink()
2660 error = NFS_PROTO(dir)->symlink(dir, dentry, folio, pathlen, &attr); in nfs_symlink()
2661 trace_nfs_symlink_exit(dir, dentry, error); in nfs_symlink()
2664 dir->i_sb->s_id, dir->i_ino, in nfs_symlink()
2671 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_symlink()
2689 nfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry) in nfs_link() argument
2697 trace_nfs_link_enter(inode, dir, dentry); in nfs_link()
2701 error = NFS_PROTO(dir)->link(inode, dir, &dentry->d_name); in nfs_link()
2703 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_link()
2707 trace_nfs_link_exit(inode, dir, dentry, error); in nfs_link()