Lines Matching refs:dentry
149 static int debugfs_show_options(struct seq_file *m, struct dentry *root) in debugfs_show_options()
181 static void debugfs_release_dentry(struct dentry *dentry) in debugfs_release_dentry() argument
183 void *fsd = dentry->d_fsdata; in debugfs_release_dentry()
186 kfree(dentry->d_fsdata); in debugfs_release_dentry()
192 f = (debugfs_automount_t)path->dentry->d_fsdata; in debugfs_automount()
193 return f(path->dentry, d_inode(path->dentry)->i_private); in debugfs_automount()
236 static struct dentry *debug_mount(struct file_system_type *fs_type, in debug_mount()
263 struct dentry *debugfs_lookup(const char *name, struct dentry *parent) in debugfs_lookup()
265 struct dentry *dentry; in debugfs_lookup() local
273 dentry = lookup_one_len_unlocked(name, parent, strlen(name)); in debugfs_lookup()
274 if (IS_ERR(dentry)) in debugfs_lookup()
276 if (!d_really_is_positive(dentry)) { in debugfs_lookup()
277 dput(dentry); in debugfs_lookup()
280 return dentry; in debugfs_lookup()
284 static struct dentry *start_creating(const char *name, struct dentry *parent) in start_creating()
286 struct dentry *dentry; in start_creating() local
308 dentry = lookup_one_len(name, parent, strlen(name)); in start_creating()
309 if (!IS_ERR(dentry) && d_really_is_positive(dentry)) { in start_creating()
310 dput(dentry); in start_creating()
311 dentry = ERR_PTR(-EEXIST); in start_creating()
314 if (IS_ERR(dentry)) { in start_creating()
319 return dentry; in start_creating()
322 static struct dentry *failed_creating(struct dentry *dentry) in failed_creating() argument
324 inode_unlock(d_inode(dentry->d_parent)); in failed_creating()
325 dput(dentry); in failed_creating()
330 static struct dentry *end_creating(struct dentry *dentry) in end_creating() argument
332 inode_unlock(d_inode(dentry->d_parent)); in end_creating()
333 return dentry; in end_creating()
336 static struct dentry *__debugfs_create_file(const char *name, umode_t mode, in __debugfs_create_file()
337 struct dentry *parent, void *data, in __debugfs_create_file()
341 struct dentry *dentry; in __debugfs_create_file() local
347 dentry = start_creating(name, parent); in __debugfs_create_file()
349 if (IS_ERR(dentry)) in __debugfs_create_file()
352 inode = debugfs_get_inode(dentry->d_sb); in __debugfs_create_file()
354 return failed_creating(dentry); in __debugfs_create_file()
360 dentry->d_fsdata = (void *)((unsigned long)real_fops | in __debugfs_create_file()
363 d_instantiate(dentry, inode); in __debugfs_create_file()
364 fsnotify_create(d_inode(dentry->d_parent), dentry); in __debugfs_create_file()
365 return end_creating(dentry); in __debugfs_create_file()
394 struct dentry *debugfs_create_file(const char *name, umode_t mode, in debugfs_create_file()
395 struct dentry *parent, void *data, in debugfs_create_file()
433 struct dentry *debugfs_create_file_unsafe(const char *name, umode_t mode, in debugfs_create_file_unsafe()
434 struct dentry *parent, void *data, in debugfs_create_file_unsafe()
472 struct dentry *debugfs_create_file_size(const char *name, umode_t mode, in debugfs_create_file_size()
473 struct dentry *parent, void *data, in debugfs_create_file_size()
477 struct dentry *de = debugfs_create_file(name, mode, parent, data, fops); in debugfs_create_file_size()
503 struct dentry *debugfs_create_dir(const char *name, struct dentry *parent) in debugfs_create_dir()
505 struct dentry *dentry = start_creating(name, parent); in debugfs_create_dir() local
508 if (IS_ERR(dentry)) in debugfs_create_dir()
511 inode = debugfs_get_inode(dentry->d_sb); in debugfs_create_dir()
513 return failed_creating(dentry); in debugfs_create_dir()
521 d_instantiate(dentry, inode); in debugfs_create_dir()
522 inc_nlink(d_inode(dentry->d_parent)); in debugfs_create_dir()
523 fsnotify_mkdir(d_inode(dentry->d_parent), dentry); in debugfs_create_dir()
524 return end_creating(dentry); in debugfs_create_dir()
539 struct dentry *debugfs_create_automount(const char *name, in debugfs_create_automount()
540 struct dentry *parent, in debugfs_create_automount()
544 struct dentry *dentry = start_creating(name, parent); in debugfs_create_automount() local
547 if (IS_ERR(dentry)) in debugfs_create_automount()
550 inode = debugfs_get_inode(dentry->d_sb); in debugfs_create_automount()
552 return failed_creating(dentry); in debugfs_create_automount()
557 dentry->d_fsdata = (void *)f; in debugfs_create_automount()
560 d_instantiate(dentry, inode); in debugfs_create_automount()
561 inc_nlink(d_inode(dentry->d_parent)); in debugfs_create_automount()
562 fsnotify_mkdir(d_inode(dentry->d_parent), dentry); in debugfs_create_automount()
563 return end_creating(dentry); in debugfs_create_automount()
590 struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent, in debugfs_create_symlink()
593 struct dentry *dentry; in debugfs_create_symlink() local
599 dentry = start_creating(name, parent); in debugfs_create_symlink()
600 if (IS_ERR(dentry)) { in debugfs_create_symlink()
605 inode = debugfs_get_inode(dentry->d_sb); in debugfs_create_symlink()
608 return failed_creating(dentry); in debugfs_create_symlink()
613 d_instantiate(dentry, inode); in debugfs_create_symlink()
614 return end_creating(dentry); in debugfs_create_symlink()
618 static void __debugfs_remove_file(struct dentry *dentry, struct dentry *parent) in __debugfs_remove_file() argument
622 simple_unlink(d_inode(parent), dentry); in __debugfs_remove_file()
623 d_delete(dentry); in __debugfs_remove_file()
632 fsd = READ_ONCE(dentry->d_fsdata); in __debugfs_remove_file()
639 static int __debugfs_remove(struct dentry *dentry, struct dentry *parent) in __debugfs_remove() argument
643 if (simple_positive(dentry)) { in __debugfs_remove()
644 dget(dentry); in __debugfs_remove()
645 if (!d_is_reg(dentry)) { in __debugfs_remove()
646 if (d_is_dir(dentry)) in __debugfs_remove()
647 ret = simple_rmdir(d_inode(parent), dentry); in __debugfs_remove()
649 simple_unlink(d_inode(parent), dentry); in __debugfs_remove()
651 d_delete(dentry); in __debugfs_remove()
653 __debugfs_remove_file(dentry, parent); in __debugfs_remove()
655 dput(dentry); in __debugfs_remove()
674 void debugfs_remove(struct dentry *dentry) in debugfs_remove() argument
676 struct dentry *parent; in debugfs_remove()
679 if (IS_ERR_OR_NULL(dentry)) in debugfs_remove()
682 parent = dentry->d_parent; in debugfs_remove()
684 ret = __debugfs_remove(dentry, parent); in debugfs_remove()
704 void debugfs_remove_recursive(struct dentry *dentry) in debugfs_remove_recursive() argument
706 struct dentry *child, *parent; in debugfs_remove_recursive()
708 if (IS_ERR_OR_NULL(dentry)) in debugfs_remove_recursive()
711 parent = dentry; in debugfs_remove_recursive()
754 if (child != dentry) in debugfs_remove_recursive()
783 struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry, in debugfs_rename()
784 struct dentry *new_dir, const char *new_name) in debugfs_rename()
787 struct dentry *dentry = NULL, *trap; in debugfs_rename() local
798 dentry = lookup_one_len(new_name, new_dir, strlen(new_name)); in debugfs_rename()
800 if (IS_ERR(dentry) || dentry == trap || d_really_is_positive(dentry)) in debugfs_rename()
806 dentry, 0); in debugfs_rename()
811 d_move(old_dentry, dentry); in debugfs_rename()
817 dput(dentry); in debugfs_rename()
820 if (dentry && !IS_ERR(dentry)) in debugfs_rename()
821 dput(dentry); in debugfs_rename()