Lines Matching refs:dentry
47 static struct dentry *nfs_lookup(struct inode *, struct dentry *, struct nameidata *);
48 static int nfs_create(struct inode *, struct dentry *, int, struct nameidata *);
49 static int nfs_mkdir(struct inode *, struct dentry *, int);
50 static int nfs_rmdir(struct inode *, struct dentry *);
51 static int nfs_unlink(struct inode *, struct dentry *);
52 static int nfs_symlink(struct inode *, struct dentry *, const char *);
53 static int nfs_link(struct dentry *, struct inode *, struct dentry *);
54 static int nfs_mknod(struct inode *, struct dentry *, int, dev_t);
55 static int nfs_rename(struct inode *, struct dentry *,
56 struct inode *, struct dentry *);
57 static int nfs_fsync_dir(struct file *, struct dentry *, int);
107 static struct dentry *nfs_atomic_lookup(struct inode *, struct dentry *, struct nameidata *);
137 filp->f_path.dentry->d_parent->d_name.name, in nfs_opendir()
138 filp->f_path.dentry->d_name.name); in nfs_opendir()
179 struct inode *inode = file->f_path.dentry->d_inode; in nfs_readdir_filler()
191 error = NFS_PROTO(inode)->readdir(file->f_path.dentry, cred, desc->entry->cookie, page, in nfs_readdir_filler()
318 struct inode *inode = desc->file->f_path.dentry->d_inode; in find_dirent_page()
397 static struct dentry *nfs_readdir_lookup(nfs_readdir_descriptor_t *desc);
408 struct dentry *dentry = NULL; in nfs_do_filldir() local
423 if (dentry != NULL) in nfs_do_filldir()
424 dput(dentry); in nfs_do_filldir()
425 dentry = nfs_readdir_lookup(desc); in nfs_do_filldir()
428 if (dentry != NULL && dentry->d_inode != NULL) { in nfs_do_filldir()
429 d_type = dt_type(dentry->d_inode); in nfs_do_filldir()
430 fileid = NFS_FILEID(dentry->d_inode); in nfs_do_filldir()
450 if (dentry != NULL) in nfs_do_filldir()
451 dput(dentry); in nfs_do_filldir()
474 struct inode *inode = file->f_path.dentry->d_inode; in uncached_readdir()
490 status = NFS_PROTO(inode)->readdir(file->f_path.dentry, cred, in uncached_readdir()
529 struct dentry *dentry = filp->f_path.dentry; in nfs_readdir() local
530 struct inode *inode = dentry->d_inode; in nfs_readdir()
539 dentry->d_parent->d_name.name, dentry->d_name.name, in nfs_readdir()
563 nfs_block_sillyrename(dentry); in nfs_readdir()
599 nfs_unblock_sillyrename(dentry); in nfs_readdir()
603 dentry->d_parent->d_name.name, dentry->d_name.name, in nfs_readdir()
610 struct dentry *dentry = filp->f_path.dentry; in nfs_llseek_dir() local
611 struct inode *inode = dentry->d_inode; in nfs_llseek_dir()
614 dentry->d_parent->d_name.name, in nfs_llseek_dir()
615 dentry->d_name.name, in nfs_llseek_dir()
642 static int nfs_fsync_dir(struct file *filp, struct dentry *dentry, int datasync) in nfs_fsync_dir() argument
645 dentry->d_parent->d_name.name, dentry->d_name.name, in nfs_fsync_dir()
648 nfs_inc_stats(dentry->d_inode, NFSIOS_VFSFSYNC); in nfs_fsync_dir()
672 static int nfs_check_verifier(struct inode *dir, struct dentry *dentry) in nfs_check_verifier() argument
674 if (IS_ROOT(dentry)) in nfs_check_verifier()
678 if (!nfs_verify_change_attribute(dir, dentry->d_time)) in nfs_check_verifier()
683 if (!nfs_verify_change_attribute(dir, dentry->d_time)) in nfs_check_verifier()
753 int nfs_neg_need_reval(struct inode *dir, struct dentry *dentry, in nfs_neg_need_reval() argument
761 return !nfs_check_verifier(dir, dentry); in nfs_neg_need_reval()
775 static int nfs_lookup_revalidate(struct dentry * dentry, struct nameidata *nd) in nfs_lookup_revalidate() argument
779 struct dentry *parent; in nfs_lookup_revalidate()
784 parent = dget_parent(dentry); in nfs_lookup_revalidate()
787 inode = dentry->d_inode; in nfs_lookup_revalidate()
790 if (nfs_neg_need_reval(dir, dentry, nd)) in nfs_lookup_revalidate()
797 __func__, dentry->d_parent->d_name.name, in nfs_lookup_revalidate()
798 dentry->d_name.name); in nfs_lookup_revalidate()
806 if (!nfs_is_exclusive_create(dir, nd) && nfs_check_verifier(dir, dentry)) { in nfs_lookup_revalidate()
815 error = NFS_PROTO(dir)->lookup(dir, &dentry->d_name, &fhandle, &fattr); in nfs_lookup_revalidate()
824 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_lookup_revalidate()
828 __func__, dentry->d_parent->d_name.name, in nfs_lookup_revalidate()
829 dentry->d_name.name); in nfs_lookup_revalidate()
839 if (have_submounts(dentry)) in nfs_lookup_revalidate()
841 shrink_dcache_parent(dentry); in nfs_lookup_revalidate()
843 d_drop(dentry); in nfs_lookup_revalidate()
846 __func__, dentry->d_parent->d_name.name, in nfs_lookup_revalidate()
847 dentry->d_name.name); in nfs_lookup_revalidate()
854 static int nfs_dentry_delete(struct dentry *dentry) in nfs_dentry_delete() argument
857 dentry->d_parent->d_name.name, dentry->d_name.name, in nfs_dentry_delete()
858 dentry->d_flags); in nfs_dentry_delete()
861 if (dentry->d_inode != NULL && NFS_STALE(dentry->d_inode)) in nfs_dentry_delete()
864 if (dentry->d_flags & DCACHE_NFSFS_RENAMED) { in nfs_dentry_delete()
868 if (!(dentry->d_sb->s_flags & MS_ACTIVE)) { in nfs_dentry_delete()
889 static void nfs_dentry_iput(struct dentry *dentry, struct inode *inode) in nfs_dentry_iput() argument
895 if (dentry->d_flags & DCACHE_NFSFS_RENAMED) { in nfs_dentry_iput()
897 nfs_complete_unlink(dentry, inode); in nfs_dentry_iput()
908 static struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, struct nameidata *nd) in nfs_lookup() argument
910 struct dentry *res; in nfs_lookup()
911 struct dentry *parent; in nfs_lookup()
918 dentry->d_parent->d_name.name, dentry->d_name.name); in nfs_lookup()
922 if (dentry->d_name.len > NFS_SERVER(dir)->namelen) in nfs_lookup()
926 dentry->d_op = NFS_PROTO(dir)->dentry_ops; in nfs_lookup()
933 d_instantiate(dentry, NULL); in nfs_lookup()
938 parent = dentry->d_parent; in nfs_lookup()
941 error = NFS_PROTO(dir)->lookup(dir, &dentry->d_name, &fhandle, &fattr); in nfs_lookup()
948 inode = nfs_fhget(dentry->d_sb, &fhandle, &fattr); in nfs_lookup()
949 res = (struct dentry *)inode; in nfs_lookup()
954 res = d_materialise_unique(dentry, inode); in nfs_lookup()
958 dentry = res; in nfs_lookup()
960 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_lookup()
968 static int nfs_open_revalidate(struct dentry *, struct nameidata *);
994 static struct dentry *nfs_atomic_lookup(struct inode *dir, struct dentry *dentry, struct nameidata … in nfs_atomic_lookup() argument
996 struct dentry *res = NULL; in nfs_atomic_lookup()
1000 dir->i_sb->s_id, dir->i_ino, dentry->d_name.name); in nfs_atomic_lookup()
1006 if (dentry->d_name.len > NFS_SERVER(dir)->namelen) { in nfs_atomic_lookup()
1010 dentry->d_op = NFS_PROTO(dir)->dentry_ops; in nfs_atomic_lookup()
1015 d_instantiate(dentry, NULL); in nfs_atomic_lookup()
1020 res = nfs4_atomic_open(dir, dentry, nd); in nfs_atomic_lookup()
1040 dentry = res; in nfs_atomic_lookup()
1044 return nfs_lookup(dir, dentry, nd); in nfs_atomic_lookup()
1047 static int nfs_open_revalidate(struct dentry *dentry, struct nameidata *nd) in nfs_open_revalidate() argument
1049 struct dentry *parent = NULL; in nfs_open_revalidate()
1050 struct inode *inode = dentry->d_inode; in nfs_open_revalidate()
1056 parent = dget_parent(dentry); in nfs_open_revalidate()
1062 if (!nfs_neg_need_reval(dir, dentry, nd)) in nfs_open_revalidate()
1082 ret = nfs4_open_revalidate(dir, dentry, openflags, nd); in nfs_open_revalidate()
1086 d_drop(dentry); in nfs_open_revalidate()
1091 return nfs_lookup_revalidate(dentry, nd); in nfs_open_revalidate()
1095 static struct dentry *nfs_readdir_lookup(nfs_readdir_descriptor_t *desc) in nfs_readdir_lookup()
1097 struct dentry *parent = desc->file->f_path.dentry; in nfs_readdir_lookup()
1100 struct dentry *dentry, *alias; in nfs_readdir_lookup() local
1126 dentry = d_lookup(parent, &name); in nfs_readdir_lookup()
1127 if (dentry != NULL) { in nfs_readdir_lookup()
1129 if (dentry->d_inode != NULL && in nfs_readdir_lookup()
1130 (NFS_FILEID(dentry->d_inode) == entry->ino || in nfs_readdir_lookup()
1131 d_mountpoint(dentry))) { in nfs_readdir_lookup()
1133 return dentry; in nfs_readdir_lookup()
1134 if (nfs_compare_fh(NFS_FH(dentry->d_inode), in nfs_readdir_lookup()
1139 d_drop(dentry); in nfs_readdir_lookup()
1140 dput(dentry); in nfs_readdir_lookup()
1147 dentry = d_alloc(parent, &name); in nfs_readdir_lookup()
1148 if (dentry == NULL) in nfs_readdir_lookup()
1150 dentry->d_op = NFS_PROTO(dir)->dentry_ops; in nfs_readdir_lookup()
1151 inode = nfs_fhget(dentry->d_sb, entry->fh, entry->fattr); in nfs_readdir_lookup()
1153 dput(dentry); in nfs_readdir_lookup()
1157 alias = d_materialise_unique(dentry, inode); in nfs_readdir_lookup()
1159 dput(dentry); in nfs_readdir_lookup()
1162 dentry = alias; in nfs_readdir_lookup()
1166 nfs_set_verifier(dentry, verf); in nfs_readdir_lookup()
1167 return dentry; in nfs_readdir_lookup()
1173 int nfs_instantiate(struct dentry *dentry, struct nfs_fh *fhandle, in nfs_instantiate() argument
1176 struct dentry *parent = dget_parent(dentry); in nfs_instantiate()
1181 d_drop(dentry); in nfs_instantiate()
1184 if (dentry->d_inode) in nfs_instantiate()
1187 error = NFS_PROTO(dir)->lookup(dir, &dentry->d_name, fhandle, fattr); in nfs_instantiate()
1191 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_instantiate()
1193 struct nfs_server *server = NFS_SB(dentry->d_sb); in nfs_instantiate()
1198 inode = nfs_fhget(dentry->d_sb, fhandle, fattr); in nfs_instantiate()
1202 d_add(dentry, inode); in nfs_instantiate()
1218 static int nfs_create(struct inode *dir, struct dentry *dentry, int mode, in nfs_create() argument
1226 dir->i_sb->s_id, dir->i_ino, dentry->d_name.name); in nfs_create()
1234 error = NFS_PROTO(dir)->create(dir, dentry, &attr, open_flags, nd); in nfs_create()
1239 d_drop(dentry); in nfs_create()
1247 nfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t rdev) in nfs_mknod() argument
1253 dir->i_sb->s_id, dir->i_ino, dentry->d_name.name); in nfs_mknod()
1261 status = NFS_PROTO(dir)->mknod(dir, dentry, &attr, rdev); in nfs_mknod()
1266 d_drop(dentry); in nfs_mknod()
1273 static int nfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) in nfs_mkdir() argument
1279 dir->i_sb->s_id, dir->i_ino, dentry->d_name.name); in nfs_mkdir()
1284 error = NFS_PROTO(dir)->mkdir(dir, dentry, &attr); in nfs_mkdir()
1289 d_drop(dentry); in nfs_mkdir()
1293 static void nfs_dentry_handle_enoent(struct dentry *dentry) in nfs_dentry_handle_enoent() argument
1295 if (dentry->d_inode != NULL && !d_unhashed(dentry)) in nfs_dentry_handle_enoent()
1296 d_delete(dentry); in nfs_dentry_handle_enoent()
1299 static int nfs_rmdir(struct inode *dir, struct dentry *dentry) in nfs_rmdir() argument
1304 dir->i_sb->s_id, dir->i_ino, dentry->d_name.name); in nfs_rmdir()
1306 error = NFS_PROTO(dir)->rmdir(dir, &dentry->d_name); in nfs_rmdir()
1308 if (error == 0 && dentry->d_inode != NULL) in nfs_rmdir()
1309 clear_nlink(dentry->d_inode); in nfs_rmdir()
1311 nfs_dentry_handle_enoent(dentry); in nfs_rmdir()
1316 static int nfs_sillyrename(struct inode *dir, struct dentry *dentry) in nfs_sillyrename() argument
1319 const int fileidsize = sizeof(NFS_FILEID(dentry->d_inode))*2; in nfs_sillyrename()
1324 struct dentry *sdentry; in nfs_sillyrename()
1328 dentry->d_parent->d_name.name, dentry->d_name.name, in nfs_sillyrename()
1329 atomic_read(&dentry->d_count)); in nfs_sillyrename()
1336 if (dentry->d_flags & DCACHE_NFSFS_RENAMED) in nfs_sillyrename()
1341 (unsigned long long)NFS_FILEID(dentry->d_inode)); in nfs_sillyrename()
1344 nfs_inode_return_delegation(dentry->d_inode); in nfs_sillyrename()
1355 dentry->d_name.name, silly); in nfs_sillyrename()
1357 sdentry = lookup_one_len(silly, dentry->d_parent, slen); in nfs_sillyrename()
1368 if (dentry->d_inode) { in nfs_sillyrename()
1369 error = NFS_PROTO(dir)->rename(dir, &dentry->d_name, in nfs_sillyrename()
1371 nfs_mark_for_revalidate(dentry->d_inode); in nfs_sillyrename()
1373 error = NFS_PROTO(dir)->rename(dir, &dentry->d_name, in nfs_sillyrename()
1376 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_sillyrename()
1377 d_move(dentry, sdentry); in nfs_sillyrename()
1378 error = nfs_async_unlink(dir, dentry); in nfs_sillyrename()
1393 static int nfs_safe_remove(struct dentry *dentry) in nfs_safe_remove() argument
1395 struct inode *dir = dentry->d_parent->d_inode; in nfs_safe_remove()
1396 struct inode *inode = dentry->d_inode; in nfs_safe_remove()
1400 dentry->d_parent->d_name.name, dentry->d_name.name); in nfs_safe_remove()
1403 if (dentry->d_flags & DCACHE_NFSFS_RENAMED) { in nfs_safe_remove()
1410 error = NFS_PROTO(dir)->remove(dir, &dentry->d_name); in nfs_safe_remove()
1416 error = NFS_PROTO(dir)->remove(dir, &dentry->d_name); in nfs_safe_remove()
1418 nfs_dentry_handle_enoent(dentry); in nfs_safe_remove()
1428 static int nfs_unlink(struct inode *dir, struct dentry *dentry) in nfs_unlink() argument
1434 dir->i_ino, dentry->d_name.name); in nfs_unlink()
1437 spin_lock(&dentry->d_lock); in nfs_unlink()
1438 if (atomic_read(&dentry->d_count) > 1) { in nfs_unlink()
1439 spin_unlock(&dentry->d_lock); in nfs_unlink()
1442 write_inode_now(dentry->d_inode, 0); in nfs_unlink()
1443 error = nfs_sillyrename(dir, dentry); in nfs_unlink()
1446 if (!d_unhashed(dentry)) { in nfs_unlink()
1447 __d_drop(dentry); in nfs_unlink()
1450 spin_unlock(&dentry->d_lock); in nfs_unlink()
1452 error = nfs_safe_remove(dentry); in nfs_unlink()
1454 nfs_set_verifier(dentry, nfs_save_change_attribute(dir)); in nfs_unlink()
1456 d_rehash(dentry); in nfs_unlink()
1475 static int nfs_symlink(struct inode *dir, struct dentry *dentry, const char *symname) in nfs_symlink() argument
1485 dir->i_ino, dentry->d_name.name, symname); in nfs_symlink()
1503 error = NFS_PROTO(dir)->symlink(dir, dentry, page, pathlen, &attr); in nfs_symlink()
1507 dentry->d_name.name, symname, error); in nfs_symlink()
1508 d_drop(dentry); in nfs_symlink()
1518 if (!add_to_page_cache(page, dentry->d_inode->i_mapping, 0, in nfs_symlink()
1531 nfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry) in nfs_link() argument
1538 dentry->d_parent->d_name.name, dentry->d_name.name); in nfs_link()
1540 d_drop(dentry); in nfs_link()
1541 error = NFS_PROTO(dir)->link(inode, dir, &dentry->d_name); in nfs_link()
1544 d_add(dentry, inode); in nfs_link()
1573 static int nfs_rename(struct inode *old_dir, struct dentry *old_dentry, in nfs_rename()
1574 struct inode *new_dir, struct dentry *new_dentry) in nfs_rename()
1578 struct dentry *dentry = NULL, *rehash = NULL; in nfs_rename() local
1612 dentry = d_alloc(new_dentry->d_parent, in nfs_rename()
1614 if (!dentry) in nfs_rename()
1620 new_dentry = rehash = dentry; in nfs_rename()
1660 if (dentry) in nfs_rename()
1661 dput(dentry); in nfs_rename()