Lines Matching refs:dentry

36 	struct inode *inode = d_inode(path->dentry);  in simple_getattr()
43 int simple_statfs(struct dentry *dentry, struct kstatfs *buf) in simple_statfs() argument
45 u64 id = huge_encode_dev(dentry->d_sb->s_dev); in simple_statfs()
48 buf->f_type = dentry->d_sb->s_magic; in simple_statfs()
59 int always_delete_dentry(const struct dentry *dentry) in always_delete_dentry() argument
74 struct dentry *simple_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags) in simple_lookup() argument
76 if (dentry->d_name.len > NAME_MAX) in simple_lookup()
78 if (!dentry->d_sb->s_d_op) in simple_lookup()
79 d_set_d_op(dentry, &simple_dentry_operations); in simple_lookup()
84 d_add(dentry, NULL); in simple_lookup()
91 file->private_data = d_alloc_cursor(file->f_path.dentry); in dcache_dir_open()
111 static struct dentry *scan_positives(struct dentry *cursor, in scan_positives()
114 struct dentry *last) in scan_positives()
116 struct dentry *dentry = cursor->d_parent, *found = NULL; in scan_positives() local
118 spin_lock(&dentry->d_lock); in scan_positives()
120 struct dentry *d = hlist_entry(*p, struct dentry, d_sib); in scan_positives()
139 spin_unlock(&dentry->d_lock); in scan_positives()
141 spin_lock(&dentry->d_lock); in scan_positives()
144 spin_unlock(&dentry->d_lock); in scan_positives()
151 struct dentry *dentry = file->f_path.dentry; in dcache_dir_lseek() local
164 struct dentry *cursor = file->private_data; in dcache_dir_lseek()
165 struct dentry *to = NULL; in dcache_dir_lseek()
167 inode_lock_shared(dentry->d_inode); in dcache_dir_lseek()
170 to = scan_positives(cursor, &dentry->d_children.first, in dcache_dir_lseek()
172 spin_lock(&dentry->d_lock); in dcache_dir_lseek()
176 spin_unlock(&dentry->d_lock); in dcache_dir_lseek()
181 inode_unlock_shared(dentry->d_inode); in dcache_dir_lseek()
195 struct dentry *dentry = file->f_path.dentry; in dcache_readdir() local
196 struct dentry *cursor = file->private_data; in dcache_readdir()
197 struct dentry *next = NULL; in dcache_readdir()
204 p = &dentry->d_children.first; in dcache_readdir()
216 spin_lock(&dentry->d_lock); in dcache_readdir()
220 spin_unlock(&dentry->d_lock); in dcache_readdir()
260 static void offset_set(struct dentry *dentry, long offset) in offset_set() argument
262 dentry->d_fsdata = (void *)offset; in offset_set()
265 static long dentry2offset(struct dentry *dentry) in dentry2offset() argument
267 return (long)dentry->d_fsdata; in dentry2offset()
292 int simple_offset_add(struct offset_ctx *octx, struct dentry *dentry) in simple_offset_add() argument
297 if (dentry2offset(dentry) != 0) in simple_offset_add()
300 ret = mtree_alloc_cyclic(&octx->mt, &offset, dentry, DIR_OFFSET_MIN, in simple_offset_add()
306 offset_set(dentry, offset); in simple_offset_add()
310 static int simple_offset_replace(struct offset_ctx *octx, struct dentry *dentry, in simple_offset_replace() argument
315 ret = mtree_store(&octx->mt, offset, dentry, GFP_KERNEL); in simple_offset_replace()
318 offset_set(dentry, offset); in simple_offset_replace()
328 void simple_offset_remove(struct offset_ctx *octx, struct dentry *dentry) in simple_offset_remove() argument
332 offset = dentry2offset(dentry); in simple_offset_remove()
337 offset_set(dentry, 0); in simple_offset_remove()
354 int simple_offset_rename(struct inode *old_dir, struct dentry *old_dentry, in simple_offset_rename()
355 struct inode *new_dir, struct dentry *new_dentry) in simple_offset_rename()
384 struct dentry *old_dentry, in simple_offset_rename_exchange()
386 struct dentry *new_dentry) in simple_offset_rename_exchange()
461 static struct dentry *find_positive_dentry(struct dentry *parent, in find_positive_dentry()
462 struct dentry *dentry, in find_positive_dentry() argument
465 struct dentry *found = NULL; in find_positive_dentry()
469 dentry = d_next_sibling(dentry); in find_positive_dentry()
470 else if (!dentry) in find_positive_dentry()
471 dentry = d_first_child(parent); in find_positive_dentry()
472 hlist_for_each_entry_from(dentry, d_sib) { in find_positive_dentry()
473 if (!simple_positive(dentry)) in find_positive_dentry()
475 spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED); in find_positive_dentry()
476 if (simple_positive(dentry)) in find_positive_dentry()
477 found = dget_dlock(dentry); in find_positive_dentry()
478 spin_unlock(&dentry->d_lock); in find_positive_dentry()
486 static noinline_for_stack struct dentry *
487 offset_dir_lookup(struct dentry *parent, loff_t offset) in offset_dir_lookup()
491 struct dentry *child, *found = NULL; in offset_dir_lookup()
506 static bool offset_dir_emit(struct dir_context *ctx, struct dentry *dentry) in offset_dir_emit() argument
508 struct inode *inode = d_inode(dentry); in offset_dir_emit()
510 return dir_emit(ctx, dentry->d_name.name, dentry->d_name.len, in offset_dir_emit()
516 struct dentry *dir = file->f_path.dentry; in offset_iterate_dir()
517 struct dentry *dentry; in offset_iterate_dir() local
519 dentry = offset_dir_lookup(dir, ctx->pos); in offset_iterate_dir()
520 if (!dentry) in offset_iterate_dir()
523 struct dentry *next; in offset_iterate_dir()
525 ctx->pos = dentry2offset(dentry); in offset_iterate_dir()
526 if (!offset_dir_emit(ctx, dentry)) in offset_iterate_dir()
529 next = find_positive_dentry(dir, dentry, true); in offset_iterate_dir()
530 dput(dentry); in offset_iterate_dir()
534 dentry = next; in offset_iterate_dir()
536 dput(dentry); in offset_iterate_dir()
568 struct dentry *dir = file->f_path.dentry; in offset_readdir()
586 static struct dentry *find_next_child(struct dentry *parent, struct dentry *prev) in find_next_child()
588 struct dentry *child = NULL, *d; in find_next_child()
607 void simple_recursive_removal(struct dentry *dentry, in simple_recursive_removal() argument
608 void (*callback)(struct dentry *)) in simple_recursive_removal() argument
610 struct dentry *this = dget(dentry); in simple_recursive_removal()
612 struct dentry *victim = NULL, *child; in simple_recursive_removal()
638 if (victim == dentry) { in simple_recursive_removal()
641 if (d_is_dir(dentry)) in simple_recursive_removal()
644 dput(dentry); in simple_recursive_removal()
734 int simple_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry) in simple_link() argument
742 dget(dentry); in simple_link()
743 d_instantiate(dentry, inode); in simple_link()
748 int simple_empty(struct dentry *dentry) in simple_empty() argument
750 struct dentry *child; in simple_empty()
753 spin_lock(&dentry->d_lock); in simple_empty()
754 hlist_for_each_entry(child, &dentry->d_children, d_sib) { in simple_empty()
764 spin_unlock(&dentry->d_lock); in simple_empty()
769 int simple_unlink(struct inode *dir, struct dentry *dentry) in simple_unlink() argument
771 struct inode *inode = d_inode(dentry); in simple_unlink()
776 dput(dentry); in simple_unlink()
781 int simple_rmdir(struct inode *dir, struct dentry *dentry) in simple_rmdir() argument
783 if (!simple_empty(dentry)) in simple_rmdir()
786 drop_nlink(d_inode(dentry)); in simple_rmdir()
787 simple_unlink(dir, dentry); in simple_rmdir()
804 void simple_rename_timestamp(struct inode *old_dir, struct dentry *old_dentry, in simple_rename_timestamp()
805 struct inode *new_dir, struct dentry *new_dentry) in simple_rename_timestamp()
819 int simple_rename_exchange(struct inode *old_dir, struct dentry *old_dentry, in simple_rename_exchange()
820 struct inode *new_dir, struct dentry *new_dentry) in simple_rename_exchange()
840 struct dentry *old_dentry, struct inode *new_dir, in simple_rename()
841 struct dentry *new_dentry, unsigned int flags) in simple_rename()
885 int simple_setattr(struct mnt_idmap *idmap, struct dentry *dentry, in simple_setattr() argument
888 struct inode *inode = d_inode(dentry); in simple_setattr()
891 error = setattr_prepare(idmap, dentry, iattr); in simple_setattr()
1007 struct dentry *dentry; in simple_fill_super() local
1042 dentry = d_alloc_name(s->s_root, files->name); in simple_fill_super()
1043 if (!dentry) in simple_fill_super()
1047 dput(dentry); in simple_fill_super()
1054 d_add(dentry, inode); in simple_fill_super()
1453 struct dentry *generic_fh_to_dentry(struct super_block *sb, struct fid *fid, in generic_fh_to_dentry()
1486 struct dentry *generic_fh_to_parent(struct super_block *sb, struct fid *fid, in generic_fh_to_parent()
1691 const char *simple_get_link(struct dentry *dentry, struct inode *inode, in simple_get_link() argument
1706 static struct dentry *empty_dir_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags) in empty_dir_lookup() argument
1712 struct dentry *dentry, struct iattr *attr) in empty_dir_setattr() argument
1717 static ssize_t empty_dir_listxattr(struct dentry *dentry, char *list, size_t size) in empty_dir_listxattr() argument
1780 int generic_ci_d_compare(const struct dentry *dentry, unsigned int len, in generic_ci_d_compare() argument
1783 const struct dentry *parent; in generic_ci_d_compare()
1800 parent = READ_ONCE(dentry->d_parent); in generic_ci_d_compare()
1816 if (qstr.name == dentry->d_shortname.string) { in generic_ci_d_compare()
1817 strbuf = dentry->d_shortname; // NUL is guaranteed to be in there in generic_ci_d_compare()
1823 return utf8_strncasecmp(dentry->d_sb->s_encoding, name, &qstr); in generic_ci_d_compare()
1834 int generic_ci_d_hash(const struct dentry *dentry, struct qstr *str) in generic_ci_d_hash() argument
1836 const struct inode *dir = READ_ONCE(dentry->d_inode); in generic_ci_d_hash()
1837 struct super_block *sb = dentry->d_sb; in generic_ci_d_hash()
1844 ret = utf8_casefold_hash(um, dentry, str); in generic_ci_d_hash()
2116 struct dentry *stashed_dentry_get(struct dentry **stashed) in stashed_dentry_get()
2118 struct dentry *dentry; in stashed_dentry_get() local
2121 dentry = rcu_dereference(*stashed); in stashed_dentry_get()
2122 if (!dentry) in stashed_dentry_get()
2124 if (!lockref_get_not_dead(&dentry->d_lockref)) in stashed_dentry_get()
2126 return dentry; in stashed_dentry_get()
2129 static struct dentry *prepare_anon_dentry(struct dentry **stashed, in prepare_anon_dentry()
2133 struct dentry *dentry; in prepare_anon_dentry() local
2158 dentry = d_alloc_anon(sb); in prepare_anon_dentry()
2159 if (!dentry) { in prepare_anon_dentry()
2165 dentry->d_fsdata = stashed; in prepare_anon_dentry()
2168 d_instantiate(dentry, inode); in prepare_anon_dentry()
2169 return dentry; in prepare_anon_dentry()
2172 static struct dentry *stash_dentry(struct dentry **stashed, in stash_dentry()
2173 struct dentry *dentry) in stash_dentry() argument
2177 struct dentry *old; in stash_dentry()
2180 old = cmpxchg(stashed, NULL, dentry); in stash_dentry()
2182 return dentry; in stash_dentry()
2189 if (likely(try_cmpxchg(stashed, &old, dentry))) in stash_dentry()
2190 return dentry; in stash_dentry()
2211 int path_from_stashed(struct dentry **stashed, struct vfsmount *mnt, void *data, in path_from_stashed()
2214 struct dentry *dentry; in path_from_stashed() local
2218 path->dentry = stashed_dentry_get(stashed); in path_from_stashed()
2219 if (path->dentry) { in path_from_stashed()
2225 dentry = prepare_anon_dentry(stashed, mnt->mnt_sb, data); in path_from_stashed()
2226 if (IS_ERR(dentry)) in path_from_stashed()
2227 return PTR_ERR(dentry); in path_from_stashed()
2230 path->dentry = stash_dentry(stashed, dentry); in path_from_stashed()
2231 if (path->dentry != dentry) in path_from_stashed()
2232 dput(dentry); in path_from_stashed()
2235 WARN_ON_ONCE(path->dentry->d_fsdata != stashed); in path_from_stashed()
2236 WARN_ON_ONCE(d_inode(path->dentry)->i_private != data); in path_from_stashed()
2241 void stashed_dentry_prune(struct dentry *dentry) in stashed_dentry_prune() argument
2243 struct dentry **stashed = dentry->d_fsdata; in stashed_dentry_prune()
2244 struct inode *inode = d_inode(dentry); in stashed_dentry_prune()
2257 cmpxchg(stashed, dentry, NULL); in stashed_dentry_prune()