Lines Matching refs:dentry
121 if (filp->f_path.dentry == filp->f_path.mnt->mnt_root) { in nfs_opendir()
415 int nfs_same_file(struct dentry *dentry, struct nfs_entry *entry) in nfs_same_file() argument
419 if (d_really_is_negative(dentry)) in nfs_same_file()
422 nfsi = NFS_I(d_inode(dentry)); in nfs_same_file()
470 void nfs_prime_dcache(struct dentry *parent, struct nfs_entry *entry) in nfs_prime_dcache()
473 struct dentry *dentry; in nfs_prime_dcache() local
474 struct dentry *alias; in nfs_prime_dcache()
491 dentry = d_lookup(parent, &filename); in nfs_prime_dcache()
492 if (dentry != NULL) { in nfs_prime_dcache()
494 if (!nfs_fsid_equal(&NFS_SB(dentry->d_sb)->fsid, in nfs_prime_dcache()
497 if (nfs_same_file(dentry, entry)) { in nfs_prime_dcache()
498 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_prime_dcache()
499 status = nfs_refresh_inode(d_inode(dentry), entry->fattr); in nfs_prime_dcache()
501 nfs_setsecurity(d_inode(dentry), entry->fattr, entry->label); in nfs_prime_dcache()
504 d_invalidate(dentry); in nfs_prime_dcache()
505 dput(dentry); in nfs_prime_dcache()
509 dentry = d_alloc(parent, &filename); in nfs_prime_dcache()
510 if (dentry == NULL) in nfs_prime_dcache()
513 inode = nfs_fhget(dentry->d_sb, entry->fh, entry->fattr, entry->label); in nfs_prime_dcache()
517 alias = d_splice_alias(inode, dentry); in nfs_prime_dcache()
524 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_prime_dcache()
527 dput(dentry); in nfs_prime_dcache()
867 struct dentry *dentry = file_dentry(file); in nfs_readdir() local
868 struct inode *inode = d_inode(dentry); in nfs_readdir()
892 nfs_block_sillyrename(dentry); in nfs_readdir()
928 nfs_unblock_sillyrename(dentry); in nfs_readdir()
1003 static int nfs_check_verifier(struct inode *dir, struct dentry *dentry, in nfs_check_verifier() argument
1008 if (IS_ROOT(dentry)) in nfs_check_verifier()
1012 if (!nfs_verify_change_attribute(dir, dentry->d_time)) in nfs_check_verifier()
1021 if (!nfs_verify_change_attribute(dir, dentry->d_time)) in nfs_check_verifier()
1082 int nfs_neg_need_reval(struct inode *dir, struct dentry *dentry, in nfs_neg_need_reval() argument
1090 return !nfs_check_verifier(dir, dentry, flags & LOOKUP_RCU); in nfs_neg_need_reval()
1104 static int nfs_lookup_revalidate(struct dentry *dentry, unsigned int flags) in nfs_lookup_revalidate() argument
1108 struct dentry *parent; in nfs_lookup_revalidate()
1115 parent = ACCESS_ONCE(dentry->d_parent); in nfs_lookup_revalidate()
1120 parent = dget_parent(dentry); in nfs_lookup_revalidate()
1124 inode = d_inode(dentry); in nfs_lookup_revalidate()
1127 if (nfs_neg_need_reval(dir, dentry, flags)) { in nfs_lookup_revalidate()
1139 __func__, dentry); in nfs_lookup_revalidate()
1148 nfs_check_verifier(dir, dentry, flags & LOOKUP_RCU)) { in nfs_lookup_revalidate()
1174 trace_nfs_lookup_revalidate_enter(dir, dentry, flags); in nfs_lookup_revalidate()
1175 error = NFS_PROTO(dir)->lookup(dir, &dentry->d_name, fhandle, fattr, label); in nfs_lookup_revalidate()
1176 trace_nfs_lookup_revalidate_exit(dir, dentry, flags, error); in nfs_lookup_revalidate()
1191 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_lookup_revalidate()
1197 if (parent != ACCESS_ONCE(dentry->d_parent)) in nfs_lookup_revalidate()
1202 __func__, dentry); in nfs_lookup_revalidate()
1221 if (IS_ROOT(dentry)) in nfs_lookup_revalidate()
1226 __func__, dentry); in nfs_lookup_revalidate()
1235 __func__, dentry, error); in nfs_lookup_revalidate()
1248 static int nfs_weak_revalidate(struct dentry *dentry, unsigned int flags) in nfs_weak_revalidate() argument
1251 struct inode *inode = d_inode(dentry); in nfs_weak_revalidate()
1260 __func__, dentry); in nfs_weak_revalidate()
1266 __func__, dentry); in nfs_weak_revalidate()
1279 static int nfs_dentry_delete(const struct dentry *dentry) in nfs_dentry_delete() argument
1282 dentry, dentry->d_flags); in nfs_dentry_delete()
1285 if (d_really_is_positive(dentry) && NFS_STALE(d_inode(dentry))) in nfs_dentry_delete()
1288 if (dentry->d_flags & DCACHE_NFSFS_RENAMED) { in nfs_dentry_delete()
1292 if (!(dentry->d_sb->s_flags & MS_ACTIVE)) { in nfs_dentry_delete()
1316 static void nfs_dentry_iput(struct dentry *dentry, struct inode *inode) in nfs_dentry_iput() argument
1322 if (dentry->d_flags & DCACHE_NFSFS_RENAMED) { in nfs_dentry_iput()
1323 nfs_complete_unlink(dentry, inode); in nfs_dentry_iput()
1329 static void nfs_d_release(struct dentry *dentry) in nfs_d_release() argument
1332 if (unlikely(dentry->d_fsdata)) { in nfs_d_release()
1333 if (dentry->d_flags & DCACHE_NFSFS_RENAMED) in nfs_d_release()
1336 kfree(dentry->d_fsdata); in nfs_d_release()
1350 struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, unsigned int flags) in nfs_lookup() argument
1352 struct dentry *res; in nfs_lookup()
1353 struct dentry *parent; in nfs_lookup()
1360 dfprintk(VFS, "NFS: lookup(%pd2)\n", dentry); in nfs_lookup()
1364 if (dentry->d_name.len > NFS_SERVER(dir)->namelen) in nfs_lookup()
1372 d_instantiate(dentry, NULL); in nfs_lookup()
1387 parent = dentry->d_parent; in nfs_lookup()
1389 trace_nfs_lookup_enter(dir, dentry, flags); in nfs_lookup()
1391 error = NFS_PROTO(dir)->lookup(dir, &dentry->d_name, fhandle, fattr, label); in nfs_lookup()
1398 inode = nfs_fhget(dentry->d_sb, fhandle, fattr, label); in nfs_lookup()
1407 res = d_splice_alias(inode, dentry); in nfs_lookup()
1411 dentry = res; in nfs_lookup()
1413 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_lookup()
1416 trace_nfs_lookup_exit(dir, dentry, flags, error); in nfs_lookup()
1426 static int nfs4_lookup_revalidate(struct dentry *, unsigned int);
1447 static struct nfs_open_context *create_nfs_open_context(struct dentry *dentry, int open_flags) in create_nfs_open_context() argument
1449 return alloc_nfs_open_context(dentry, flags_to_mode(open_flags)); in create_nfs_open_context()
1459 struct dentry *dentry, in nfs_finish_open() argument
1465 err = finish_open(file, dentry, do_open, opened); in nfs_finish_open()
1474 int nfs_atomic_open(struct inode *dir, struct dentry *dentry, in nfs_atomic_open() argument
1479 struct dentry *res; in nfs_atomic_open()
1486 BUG_ON(d_inode(dentry)); in nfs_atomic_open()
1489 dir->i_sb->s_id, dir->i_ino, dentry); in nfs_atomic_open()
1497 if (!d_unhashed(dentry)) { in nfs_atomic_open()
1509 if (dentry->d_name.len > NFS_SERVER(dir)->namelen) in nfs_atomic_open()
1521 ctx = create_nfs_open_context(dentry, open_flags); in nfs_atomic_open()
1527 nfs_block_sillyrename(dentry->d_parent); in nfs_atomic_open()
1529 nfs_unblock_sillyrename(dentry->d_parent); in nfs_atomic_open()
1536 d_drop(dentry); in nfs_atomic_open()
1537 d_add(dentry, NULL); in nfs_atomic_open()
1538 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_atomic_open()
1554 err = nfs_finish_open(ctx, ctx->dentry, file, open_flags, opened); in nfs_atomic_open()
1561 res = nfs_lookup(dir, dentry, lookup_flags); in nfs_atomic_open()
1570 static int nfs4_lookup_revalidate(struct dentry *dentry, unsigned int flags) in nfs4_lookup_revalidate() argument
1577 if (d_mountpoint(dentry)) in nfs4_lookup_revalidate()
1579 if (NFS_SB(dentry->d_sb)->caps & NFS_CAP_ATOMIC_OPEN_V1) in nfs4_lookup_revalidate()
1582 inode = d_inode(dentry); in nfs4_lookup_revalidate()
1588 struct dentry *parent; in nfs4_lookup_revalidate()
1592 parent = ACCESS_ONCE(dentry->d_parent); in nfs4_lookup_revalidate()
1597 parent = dget_parent(dentry); in nfs4_lookup_revalidate()
1600 if (!nfs_neg_need_reval(dir, dentry, flags)) in nfs4_lookup_revalidate()
1606 else if (parent != ACCESS_ONCE(dentry->d_parent)) in nfs4_lookup_revalidate()
1625 return nfs_lookup_revalidate(dentry, flags); in nfs4_lookup_revalidate()
1633 int nfs_instantiate(struct dentry *dentry, struct nfs_fh *fhandle, in nfs_instantiate() argument
1637 struct dentry *parent = dget_parent(dentry); in nfs_instantiate()
1642 d_drop(dentry); in nfs_instantiate()
1645 if (d_really_is_positive(dentry)) in nfs_instantiate()
1648 error = NFS_PROTO(dir)->lookup(dir, &dentry->d_name, fhandle, fattr, NULL); in nfs_instantiate()
1652 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_instantiate()
1654 struct nfs_server *server = NFS_SB(dentry->d_sb); in nfs_instantiate()
1659 inode = nfs_fhget(dentry->d_sb, fhandle, fattr, label); in nfs_instantiate()
1663 d_add(dentry, inode); in nfs_instantiate()
1680 int nfs_create(struct inode *dir, struct dentry *dentry, in nfs_create() argument
1688 dir->i_sb->s_id, dir->i_ino, dentry); in nfs_create()
1693 trace_nfs_create_enter(dir, dentry, open_flags); in nfs_create()
1694 error = NFS_PROTO(dir)->create(dir, dentry, &attr, open_flags); in nfs_create()
1695 trace_nfs_create_exit(dir, dentry, open_flags, error); in nfs_create()
1700 d_drop(dentry); in nfs_create()
1709 nfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t rdev) in nfs_mknod() argument
1715 dir->i_sb->s_id, dir->i_ino, dentry); in nfs_mknod()
1720 trace_nfs_mknod_enter(dir, dentry); in nfs_mknod()
1721 status = NFS_PROTO(dir)->mknod(dir, dentry, &attr, rdev); in nfs_mknod()
1722 trace_nfs_mknod_exit(dir, dentry, status); in nfs_mknod()
1727 d_drop(dentry); in nfs_mknod()
1735 int nfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) in nfs_mkdir() argument
1741 dir->i_sb->s_id, dir->i_ino, dentry); in nfs_mkdir()
1746 trace_nfs_mkdir_enter(dir, dentry); in nfs_mkdir()
1747 error = NFS_PROTO(dir)->mkdir(dir, dentry, &attr); in nfs_mkdir()
1748 trace_nfs_mkdir_exit(dir, dentry, error); in nfs_mkdir()
1753 d_drop(dentry); in nfs_mkdir()
1758 static void nfs_dentry_handle_enoent(struct dentry *dentry) in nfs_dentry_handle_enoent() argument
1760 if (simple_positive(dentry)) in nfs_dentry_handle_enoent()
1761 d_delete(dentry); in nfs_dentry_handle_enoent()
1764 int nfs_rmdir(struct inode *dir, struct dentry *dentry) in nfs_rmdir() argument
1769 dir->i_sb->s_id, dir->i_ino, dentry); in nfs_rmdir()
1771 trace_nfs_rmdir_enter(dir, dentry); in nfs_rmdir()
1772 if (d_really_is_positive(dentry)) { in nfs_rmdir()
1773 nfs_wait_on_sillyrename(dentry); in nfs_rmdir()
1774 error = NFS_PROTO(dir)->rmdir(dir, &dentry->d_name); in nfs_rmdir()
1778 clear_nlink(d_inode(dentry)); in nfs_rmdir()
1781 nfs_dentry_handle_enoent(dentry); in nfs_rmdir()
1784 error = NFS_PROTO(dir)->rmdir(dir, &dentry->d_name); in nfs_rmdir()
1785 trace_nfs_rmdir_exit(dir, dentry, error); in nfs_rmdir()
1798 static int nfs_safe_remove(struct dentry *dentry) in nfs_safe_remove() argument
1800 struct inode *dir = d_inode(dentry->d_parent); in nfs_safe_remove()
1801 struct inode *inode = d_inode(dentry); in nfs_safe_remove()
1804 dfprintk(VFS, "NFS: safe_remove(%pd2)\n", dentry); in nfs_safe_remove()
1807 if (dentry->d_flags & DCACHE_NFSFS_RENAMED) { in nfs_safe_remove()
1812 trace_nfs_remove_enter(dir, dentry); in nfs_safe_remove()
1815 error = NFS_PROTO(dir)->remove(dir, &dentry->d_name); in nfs_safe_remove()
1819 error = NFS_PROTO(dir)->remove(dir, &dentry->d_name); in nfs_safe_remove()
1821 nfs_dentry_handle_enoent(dentry); in nfs_safe_remove()
1822 trace_nfs_remove_exit(dir, dentry, error); in nfs_safe_remove()
1832 int nfs_unlink(struct inode *dir, struct dentry *dentry) in nfs_unlink() argument
1838 dir->i_ino, dentry); in nfs_unlink()
1840 trace_nfs_unlink_enter(dir, dentry); in nfs_unlink()
1841 spin_lock(&dentry->d_lock); in nfs_unlink()
1842 if (d_count(dentry) > 1) { in nfs_unlink()
1843 spin_unlock(&dentry->d_lock); in nfs_unlink()
1845 write_inode_now(d_inode(dentry), 0); in nfs_unlink()
1846 error = nfs_sillyrename(dir, dentry); in nfs_unlink()
1849 if (!d_unhashed(dentry)) { in nfs_unlink()
1850 __d_drop(dentry); in nfs_unlink()
1853 spin_unlock(&dentry->d_lock); in nfs_unlink()
1854 error = nfs_safe_remove(dentry); in nfs_unlink()
1856 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_unlink()
1858 d_rehash(dentry); in nfs_unlink()
1860 trace_nfs_unlink_exit(dir, dentry, error); in nfs_unlink()
1880 int nfs_symlink(struct inode *dir, struct dentry *dentry, const char *symname) in nfs_symlink() argument
1889 dir->i_ino, dentry, symname); in nfs_symlink()
1907 trace_nfs_symlink_enter(dir, dentry); in nfs_symlink()
1908 error = NFS_PROTO(dir)->symlink(dir, dentry, page, pathlen, &attr); in nfs_symlink()
1909 trace_nfs_symlink_exit(dir, dentry, error); in nfs_symlink()
1913 dentry, symname, error); in nfs_symlink()
1914 d_drop(dentry); in nfs_symlink()
1923 if (!add_to_page_cache_lru(page, d_inode(dentry)->i_mapping, 0, in nfs_symlink()
1940 nfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry) in nfs_link() argument
1946 old_dentry, dentry); in nfs_link()
1948 trace_nfs_link_enter(inode, dir, dentry); in nfs_link()
1951 d_drop(dentry); in nfs_link()
1952 error = NFS_PROTO(dir)->link(inode, dir, &dentry->d_name); in nfs_link()
1955 d_add(dentry, inode); in nfs_link()
1957 trace_nfs_link_exit(inode, dir, dentry, error); in nfs_link()
1986 int nfs_rename(struct inode *old_dir, struct dentry *old_dentry, in nfs_rename()
1987 struct inode *new_dir, struct dentry *new_dentry) in nfs_rename()
1991 struct dentry *dentry = NULL, *rehash = NULL; in nfs_rename() local
2020 dentry = d_alloc(new_dentry->d_parent, in nfs_rename()
2022 if (!dentry) in nfs_rename()
2030 new_dentry = dentry; in nfs_rename()
2066 if (dentry) in nfs_rename()
2067 dput(dentry); in nfs_rename()