Lines Matching refs:dentry
416 int nfs_same_file(struct dentry *dentry, struct nfs_entry *entry) in nfs_same_file() argument
421 if (d_really_is_negative(dentry)) in nfs_same_file()
424 inode = d_inode(dentry); in nfs_same_file()
483 void nfs_prime_dcache(struct dentry *parent, struct nfs_entry *entry, in nfs_prime_dcache()
488 struct dentry *dentry; in nfs_prime_dcache() local
489 struct dentry *alias; in nfs_prime_dcache()
513 dentry = d_lookup(parent, &filename); in nfs_prime_dcache()
515 if (!dentry) { in nfs_prime_dcache()
516 dentry = d_alloc_parallel(parent, &filename, &wq); in nfs_prime_dcache()
517 if (IS_ERR(dentry)) in nfs_prime_dcache()
520 if (!d_in_lookup(dentry)) { in nfs_prime_dcache()
522 if (!nfs_fsid_equal(&NFS_SB(dentry->d_sb)->fsid, in nfs_prime_dcache()
525 if (nfs_same_file(dentry, entry)) { in nfs_prime_dcache()
528 nfs_set_verifier(dentry, dir_verifier); in nfs_prime_dcache()
529 status = nfs_refresh_inode(d_inode(dentry), entry->fattr); in nfs_prime_dcache()
531 nfs_setsecurity(d_inode(dentry), entry->fattr, entry->label); in nfs_prime_dcache()
534 d_invalidate(dentry); in nfs_prime_dcache()
535 dput(dentry); in nfs_prime_dcache()
536 dentry = NULL; in nfs_prime_dcache()
541 d_lookup_done(dentry); in nfs_prime_dcache()
545 inode = nfs_fhget(dentry->d_sb, entry->fh, entry->fattr, entry->label); in nfs_prime_dcache()
546 alias = d_splice_alias(inode, dentry); in nfs_prime_dcache()
547 d_lookup_done(dentry); in nfs_prime_dcache()
551 dput(dentry); in nfs_prime_dcache()
552 dentry = alias; in nfs_prime_dcache()
554 nfs_set_verifier(dentry, dir_verifier); in nfs_prime_dcache()
556 dput(dentry); in nfs_prime_dcache()
891 struct dentry *dentry = file_dentry(file); in nfs_readdir() local
892 struct inode *inode = d_inode(dentry); in nfs_readdir()
1056 static bool nfs_verifier_is_delegated(struct dentry *dentry) in nfs_verifier_is_delegated() argument
1058 return nfs_test_verifier_delegated(dentry->d_time); in nfs_verifier_is_delegated()
1061 static void nfs_set_verifier_locked(struct dentry *dentry, unsigned long verf) in nfs_set_verifier_locked() argument
1063 struct inode *inode = d_inode(dentry); in nfs_set_verifier_locked()
1064 struct inode *dir = d_inode(dentry->d_parent); in nfs_set_verifier_locked()
1070 dentry->d_time = verf; in nfs_set_verifier_locked()
1083 void nfs_set_verifier(struct dentry *dentry, unsigned long verf) in nfs_set_verifier() argument
1086 spin_lock(&dentry->d_lock); in nfs_set_verifier()
1087 nfs_set_verifier_locked(dentry, verf); in nfs_set_verifier()
1088 spin_unlock(&dentry->d_lock); in nfs_set_verifier()
1105 struct dentry *alias; in nfs_clear_verifier_delegated()
1126 static int nfs_check_verifier(struct inode *dir, struct dentry *dentry, in nfs_check_verifier() argument
1129 if (IS_ROOT(dentry)) in nfs_check_verifier()
1133 if (!nfs_verify_change_attribute(dir, dentry->d_time)) in nfs_check_verifier()
1142 if (!nfs_verify_change_attribute(dir, dentry->d_time)) in nfs_check_verifier()
1227 int nfs_neg_need_reval(struct inode *dir, struct dentry *dentry, in nfs_neg_need_reval() argument
1234 return !nfs_check_verifier(dir, dentry, flags & LOOKUP_RCU); in nfs_neg_need_reval()
1238 nfs_lookup_revalidate_done(struct inode *dir, struct dentry *dentry, in nfs_lookup_revalidate_done() argument
1244 __func__, dentry); in nfs_lookup_revalidate_done()
1253 if (inode && IS_ROOT(dentry)) in nfs_lookup_revalidate_done()
1256 __func__, dentry); in nfs_lookup_revalidate_done()
1260 __func__, dentry, error); in nfs_lookup_revalidate_done()
1265 nfs_lookup_revalidate_negative(struct inode *dir, struct dentry *dentry, in nfs_lookup_revalidate_negative() argument
1269 if (nfs_neg_need_reval(dir, dentry, flags)) { in nfs_lookup_revalidate_negative()
1274 return nfs_lookup_revalidate_done(dir, dentry, NULL, ret); in nfs_lookup_revalidate_negative()
1278 nfs_lookup_revalidate_delegated(struct inode *dir, struct dentry *dentry, in nfs_lookup_revalidate_delegated() argument
1281 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_lookup_revalidate_delegated()
1282 return nfs_lookup_revalidate_done(dir, dentry, inode, 1); in nfs_lookup_revalidate_delegated()
1286 nfs_lookup_revalidate_dentry(struct inode *dir, struct dentry *dentry, in nfs_lookup_revalidate_dentry() argument
1303 ret = NFS_PROTO(dir)->lookup(dir, dentry, fhandle, fattr, label); in nfs_lookup_revalidate_dentry()
1323 nfs_set_verifier(dentry, dir_verifier); in nfs_lookup_revalidate_dentry()
1337 if (!ret && nfs_verify_change_attribute(dir, dentry->d_time)) in nfs_lookup_revalidate_dentry()
1339 return nfs_lookup_revalidate_done(dir, dentry, inode, ret); in nfs_lookup_revalidate_dentry()
1354 nfs_do_lookup_revalidate(struct inode *dir, struct dentry *dentry, in nfs_do_lookup_revalidate() argument
1361 inode = d_inode(dentry); in nfs_do_lookup_revalidate()
1364 return nfs_lookup_revalidate_negative(dir, dentry, flags); in nfs_do_lookup_revalidate()
1368 __func__, dentry); in nfs_do_lookup_revalidate()
1372 if (nfs_verifier_is_delegated(dentry)) in nfs_do_lookup_revalidate()
1373 return nfs_lookup_revalidate_delegated(dir, dentry, inode); in nfs_do_lookup_revalidate()
1377 nfs_check_verifier(dir, dentry, flags & LOOKUP_RCU)) { in nfs_do_lookup_revalidate()
1394 trace_nfs_lookup_revalidate_enter(dir, dentry, flags); in nfs_do_lookup_revalidate()
1395 error = nfs_lookup_revalidate_dentry(dir, dentry, inode); in nfs_do_lookup_revalidate()
1396 trace_nfs_lookup_revalidate_exit(dir, dentry, flags, error); in nfs_do_lookup_revalidate()
1399 return nfs_lookup_revalidate_done(dir, dentry, inode, 1); in nfs_do_lookup_revalidate()
1403 return nfs_lookup_revalidate_done(dir, dentry, inode, 0); in nfs_do_lookup_revalidate()
1407 __nfs_lookup_revalidate(struct dentry *dentry, unsigned int flags, in __nfs_lookup_revalidate() argument
1408 int (*reval)(struct inode *, struct dentry *, unsigned int)) in __nfs_lookup_revalidate()
1410 struct dentry *parent; in __nfs_lookup_revalidate()
1415 parent = READ_ONCE(dentry->d_parent); in __nfs_lookup_revalidate()
1419 ret = reval(dir, dentry, flags); in __nfs_lookup_revalidate()
1420 if (parent != READ_ONCE(dentry->d_parent)) in __nfs_lookup_revalidate()
1423 parent = dget_parent(dentry); in __nfs_lookup_revalidate()
1424 ret = reval(d_inode(parent), dentry, flags); in __nfs_lookup_revalidate()
1430 static int nfs_lookup_revalidate(struct dentry *dentry, unsigned int flags) in nfs_lookup_revalidate() argument
1432 return __nfs_lookup_revalidate(dentry, flags, nfs_do_lookup_revalidate); in nfs_lookup_revalidate()
1444 static int nfs_weak_revalidate(struct dentry *dentry, unsigned int flags) in nfs_weak_revalidate() argument
1446 struct inode *inode = d_inode(dentry); in nfs_weak_revalidate()
1456 __func__, dentry); in nfs_weak_revalidate()
1462 __func__, dentry); in nfs_weak_revalidate()
1475 static int nfs_dentry_delete(const struct dentry *dentry) in nfs_dentry_delete() argument
1478 dentry, dentry->d_flags); in nfs_dentry_delete()
1481 if (d_really_is_positive(dentry) && NFS_STALE(d_inode(dentry))) in nfs_dentry_delete()
1484 if (dentry->d_flags & DCACHE_NFSFS_RENAMED) { in nfs_dentry_delete()
1488 if (!(dentry->d_sb->s_flags & SB_ACTIVE)) { in nfs_dentry_delete()
1516 static void nfs_dentry_iput(struct dentry *dentry, struct inode *inode) in nfs_dentry_iput() argument
1522 if (dentry->d_flags & DCACHE_NFSFS_RENAMED) { in nfs_dentry_iput()
1523 nfs_complete_unlink(dentry, inode); in nfs_dentry_iput()
1529 static void nfs_d_release(struct dentry *dentry) in nfs_d_release() argument
1532 if (unlikely(dentry->d_fsdata)) { in nfs_d_release()
1533 if (dentry->d_flags & DCACHE_NFSFS_RENAMED) in nfs_d_release()
1536 kfree(dentry->d_fsdata); in nfs_d_release()
1550 struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, unsigned int flags) in nfs_lookup() argument
1552 struct dentry *res; in nfs_lookup()
1560 dfprintk(VFS, "NFS: lookup(%pd2)\n", dentry); in nfs_lookup()
1563 if (unlikely(dentry->d_name.len > NFS_SERVER(dir)->namelen)) in nfs_lookup()
1584 trace_nfs_lookup_enter(dir, dentry, flags); in nfs_lookup()
1585 error = NFS_PROTO(dir)->lookup(dir, dentry, fhandle, fattr, label); in nfs_lookup()
1592 inode = nfs_fhget(dentry->d_sb, fhandle, fattr, label); in nfs_lookup()
1601 res = d_splice_alias(inode, dentry); in nfs_lookup()
1605 dentry = res; in nfs_lookup()
1607 nfs_set_verifier(dentry, dir_verifier); in nfs_lookup()
1609 trace_nfs_lookup_exit(dir, dentry, flags, error); in nfs_lookup()
1619 static int nfs4_lookup_revalidate(struct dentry *, unsigned int);
1631 static struct nfs_open_context *create_nfs_open_context(struct dentry *dentry, int open_flags, stru… in create_nfs_open_context() argument
1633 return alloc_nfs_open_context(dentry, flags_to_mode(open_flags), filp); in create_nfs_open_context()
1643 struct dentry *dentry, in nfs_finish_open() argument
1648 err = finish_open(file, dentry, do_open); in nfs_finish_open()
1651 if (S_ISREG(file->f_path.dentry->d_inode->i_mode)) in nfs_finish_open()
1659 int nfs_atomic_open(struct inode *dir, struct dentry *dentry, in nfs_atomic_open() argument
1665 struct dentry *res; in nfs_atomic_open()
1674 BUG_ON(d_inode(dentry)); in nfs_atomic_open()
1677 dir->i_sb->s_id, dir->i_ino, dentry); in nfs_atomic_open()
1685 if (!d_in_lookup(dentry)) { in nfs_atomic_open()
1697 if (dentry->d_name.len > NFS_SERVER(dir)->namelen) in nfs_atomic_open()
1714 if (!(open_flags & O_CREAT) && !d_in_lookup(dentry)) { in nfs_atomic_open()
1715 d_drop(dentry); in nfs_atomic_open()
1717 dentry = d_alloc_parallel(dentry->d_parent, in nfs_atomic_open()
1718 &dentry->d_name, &wq); in nfs_atomic_open()
1719 if (IS_ERR(dentry)) in nfs_atomic_open()
1720 return PTR_ERR(dentry); in nfs_atomic_open()
1721 if (unlikely(!d_in_lookup(dentry))) in nfs_atomic_open()
1722 return finish_no_open(file, dentry); in nfs_atomic_open()
1725 ctx = create_nfs_open_context(dentry, open_flags, file); in nfs_atomic_open()
1738 d_drop(dentry); in nfs_atomic_open()
1741 d_splice_alias(NULL, dentry); in nfs_atomic_open()
1742 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_atomic_open()
1758 err = nfs_finish_open(ctx, ctx->dentry, file, open_flags); in nfs_atomic_open()
1763 d_lookup_done(dentry); in nfs_atomic_open()
1764 dput(dentry); in nfs_atomic_open()
1769 res = nfs_lookup(dir, dentry, lookup_flags); in nfs_atomic_open()
1771 inode = d_inode(dentry); in nfs_atomic_open()
1789 d_lookup_done(dentry); in nfs_atomic_open()
1791 res = dentry; in nfs_atomic_open()
1793 dput(dentry); in nfs_atomic_open()
1802 nfs4_do_lookup_revalidate(struct inode *dir, struct dentry *dentry, in nfs4_do_lookup_revalidate() argument
1809 if (d_mountpoint(dentry)) in nfs4_do_lookup_revalidate()
1812 inode = d_inode(dentry); in nfs4_do_lookup_revalidate()
1820 if (nfs_verifier_is_delegated(dentry)) in nfs4_do_lookup_revalidate()
1821 return nfs_lookup_revalidate_delegated(dir, dentry, inode); in nfs4_do_lookup_revalidate()
1832 if (!nfs_check_verifier(dir, dentry, flags & LOOKUP_RCU)) in nfs4_do_lookup_revalidate()
1840 return nfs_lookup_revalidate_dentry(dir, dentry, inode); in nfs4_do_lookup_revalidate()
1843 return nfs_do_lookup_revalidate(dir, dentry, flags); in nfs4_do_lookup_revalidate()
1846 static int nfs4_lookup_revalidate(struct dentry *dentry, unsigned int flags) in nfs4_lookup_revalidate() argument
1848 return __nfs_lookup_revalidate(dentry, flags, in nfs4_lookup_revalidate()
1854 struct dentry *
1855 nfs_add_or_obtain(struct dentry *dentry, struct nfs_fh *fhandle, in nfs_add_or_obtain() argument
1859 struct dentry *parent = dget_parent(dentry); in nfs_add_or_obtain()
1862 struct dentry *d; in nfs_add_or_obtain()
1865 d_drop(dentry); in nfs_add_or_obtain()
1868 error = NFS_PROTO(dir)->lookup(dir, dentry, fhandle, fattr, NULL); in nfs_add_or_obtain()
1872 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_add_or_obtain()
1874 struct nfs_server *server = NFS_SB(dentry->d_sb); in nfs_add_or_obtain()
1880 inode = nfs_fhget(dentry->d_sb, fhandle, fattr, label); in nfs_add_or_obtain()
1881 d = d_splice_alias(inode, dentry); in nfs_add_or_obtain()
1894 int nfs_instantiate(struct dentry *dentry, struct nfs_fh *fhandle, in nfs_instantiate() argument
1898 struct dentry *d; in nfs_instantiate()
1900 d = nfs_add_or_obtain(dentry, fhandle, fattr, label); in nfs_instantiate()
1916 int nfs_create(struct inode *dir, struct dentry *dentry, in nfs_create() argument
1924 dir->i_sb->s_id, dir->i_ino, dentry); in nfs_create()
1929 trace_nfs_create_enter(dir, dentry, open_flags); in nfs_create()
1930 error = NFS_PROTO(dir)->create(dir, dentry, &attr, open_flags); in nfs_create()
1931 trace_nfs_create_exit(dir, dentry, open_flags, error); in nfs_create()
1936 d_drop(dentry); in nfs_create()
1945 nfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t rdev) in nfs_mknod() argument
1951 dir->i_sb->s_id, dir->i_ino, dentry); in nfs_mknod()
1956 trace_nfs_mknod_enter(dir, dentry); in nfs_mknod()
1957 status = NFS_PROTO(dir)->mknod(dir, dentry, &attr, rdev); in nfs_mknod()
1958 trace_nfs_mknod_exit(dir, dentry, status); in nfs_mknod()
1963 d_drop(dentry); in nfs_mknod()
1971 int nfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) in nfs_mkdir() argument
1977 dir->i_sb->s_id, dir->i_ino, dentry); in nfs_mkdir()
1982 trace_nfs_mkdir_enter(dir, dentry); in nfs_mkdir()
1983 error = NFS_PROTO(dir)->mkdir(dir, dentry, &attr); in nfs_mkdir()
1984 trace_nfs_mkdir_exit(dir, dentry, error); in nfs_mkdir()
1989 d_drop(dentry); in nfs_mkdir()
1994 static void nfs_dentry_handle_enoent(struct dentry *dentry) in nfs_dentry_handle_enoent() argument
1996 if (simple_positive(dentry)) in nfs_dentry_handle_enoent()
1997 d_delete(dentry); in nfs_dentry_handle_enoent()
2000 int nfs_rmdir(struct inode *dir, struct dentry *dentry) in nfs_rmdir() argument
2005 dir->i_sb->s_id, dir->i_ino, dentry); in nfs_rmdir()
2007 trace_nfs_rmdir_enter(dir, dentry); in nfs_rmdir()
2008 if (d_really_is_positive(dentry)) { in nfs_rmdir()
2009 down_write(&NFS_I(d_inode(dentry))->rmdir_sem); in nfs_rmdir()
2010 error = NFS_PROTO(dir)->rmdir(dir, &dentry->d_name); in nfs_rmdir()
2014 clear_nlink(d_inode(dentry)); in nfs_rmdir()
2017 nfs_dentry_handle_enoent(dentry); in nfs_rmdir()
2019 up_write(&NFS_I(d_inode(dentry))->rmdir_sem); in nfs_rmdir()
2021 error = NFS_PROTO(dir)->rmdir(dir, &dentry->d_name); in nfs_rmdir()
2022 trace_nfs_rmdir_exit(dir, dentry, error); in nfs_rmdir()
2035 static int nfs_safe_remove(struct dentry *dentry) in nfs_safe_remove() argument
2037 struct inode *dir = d_inode(dentry->d_parent); in nfs_safe_remove()
2038 struct inode *inode = d_inode(dentry); in nfs_safe_remove()
2041 dfprintk(VFS, "NFS: safe_remove(%pd2)\n", dentry); in nfs_safe_remove()
2044 if (dentry->d_flags & DCACHE_NFSFS_RENAMED) { in nfs_safe_remove()
2049 trace_nfs_remove_enter(dir, dentry); in nfs_safe_remove()
2051 error = NFS_PROTO(dir)->remove(dir, dentry); in nfs_safe_remove()
2055 error = NFS_PROTO(dir)->remove(dir, dentry); in nfs_safe_remove()
2057 nfs_dentry_handle_enoent(dentry); in nfs_safe_remove()
2058 trace_nfs_remove_exit(dir, dentry, error); in nfs_safe_remove()
2068 int nfs_unlink(struct inode *dir, struct dentry *dentry) in nfs_unlink() argument
2074 dir->i_ino, dentry); in nfs_unlink()
2076 trace_nfs_unlink_enter(dir, dentry); in nfs_unlink()
2077 spin_lock(&dentry->d_lock); in nfs_unlink()
2078 if (d_count(dentry) > 1) { in nfs_unlink()
2079 spin_unlock(&dentry->d_lock); in nfs_unlink()
2081 write_inode_now(d_inode(dentry), 0); in nfs_unlink()
2082 error = nfs_sillyrename(dir, dentry); in nfs_unlink()
2085 if (!d_unhashed(dentry)) { in nfs_unlink()
2086 __d_drop(dentry); in nfs_unlink()
2089 spin_unlock(&dentry->d_lock); in nfs_unlink()
2090 error = nfs_safe_remove(dentry); in nfs_unlink()
2092 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_unlink()
2094 d_rehash(dentry); in nfs_unlink()
2096 trace_nfs_unlink_exit(dir, dentry, error); in nfs_unlink()
2116 int nfs_symlink(struct inode *dir, struct dentry *dentry, const char *symname) in nfs_symlink() argument
2125 dir->i_ino, dentry, symname); in nfs_symlink()
2142 trace_nfs_symlink_enter(dir, dentry); in nfs_symlink()
2143 error = NFS_PROTO(dir)->symlink(dir, dentry, page, pathlen, &attr); in nfs_symlink()
2144 trace_nfs_symlink_exit(dir, dentry, error); in nfs_symlink()
2148 dentry, symname, error); in nfs_symlink()
2149 d_drop(dentry); in nfs_symlink()
2158 if (!add_to_page_cache_lru(page, d_inode(dentry)->i_mapping, 0, in nfs_symlink()
2175 nfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry) in nfs_link() argument
2181 old_dentry, dentry); in nfs_link()
2183 trace_nfs_link_enter(inode, dir, dentry); in nfs_link()
2184 d_drop(dentry); in nfs_link()
2187 error = NFS_PROTO(dir)->link(inode, dir, &dentry->d_name); in nfs_link()
2190 d_add(dentry, inode); in nfs_link()
2192 trace_nfs_link_exit(inode, dir, dentry, error); in nfs_link()
2221 int nfs_rename(struct inode *old_dir, struct dentry *old_dentry, in nfs_rename()
2222 struct inode *new_dir, struct dentry *new_dentry, in nfs_rename()
2227 struct dentry *dentry = NULL, *rehash = NULL; in nfs_rename() local
2259 dentry = d_alloc(new_dentry->d_parent, in nfs_rename()
2261 if (!dentry) in nfs_rename()
2269 new_dentry = dentry; in nfs_rename()
2321 if (dentry) in nfs_rename()
2322 dput(dentry); in nfs_rename()