Lines Matching refs:dentry
16 static int autofs_dir_symlink(struct inode *, struct dentry *, const char *);
17 static int autofs_dir_unlink(struct inode *, struct dentry *);
18 static int autofs_dir_rmdir(struct inode *, struct dentry *);
19 static int autofs_dir_mkdir(struct inode *, struct dentry *, umode_t);
26 static struct dentry *autofs_lookup(struct inode *,
27 struct dentry *, unsigned int);
30 static void autofs_dentry_release(struct dentry *);
66 static void autofs_add_active(struct dentry *dentry) in autofs_add_active() argument
68 struct autofs_sb_info *sbi = autofs_sbi(dentry->d_sb); in autofs_add_active()
71 ino = autofs_dentry_ino(dentry); in autofs_add_active()
83 static void autofs_del_active(struct dentry *dentry) in autofs_del_active() argument
85 struct autofs_sb_info *sbi = autofs_sbi(dentry->d_sb); in autofs_del_active()
88 ino = autofs_dentry_ino(dentry); in autofs_del_active()
102 struct dentry *dentry = file->f_path.dentry; in autofs_dir_open() local
103 struct autofs_sb_info *sbi = autofs_sbi(dentry->d_sb); in autofs_dir_open()
105 pr_debug("file=%p dentry=%p %pd\n", file, dentry, dentry); in autofs_dir_open()
120 if (!path_is_mountpoint(&file->f_path) && simple_empty(dentry)) { in autofs_dir_open()
130 static void autofs_dentry_release(struct dentry *de) in autofs_dentry_release()
152 static struct dentry *autofs_lookup_active(struct dentry *dentry) in autofs_lookup_active() argument
154 struct autofs_sb_info *sbi = autofs_sbi(dentry->d_sb); in autofs_lookup_active()
155 struct dentry *parent = dentry->d_parent; in autofs_lookup_active()
156 const struct qstr *name = &dentry->d_name; in autofs_lookup_active()
168 struct dentry *active; in autofs_lookup_active()
172 active = ino->dentry; in autofs_lookup_active()
206 static struct dentry *autofs_lookup_expiring(struct dentry *dentry, in autofs_lookup_expiring() argument
209 struct autofs_sb_info *sbi = autofs_sbi(dentry->d_sb); in autofs_lookup_expiring()
210 struct dentry *parent = dentry->d_parent; in autofs_lookup_expiring()
211 const struct qstr *name = &dentry->d_name; in autofs_lookup_expiring()
223 struct dentry *expiring; in autofs_lookup_expiring()
232 expiring = ino->dentry; in autofs_lookup_expiring()
268 struct autofs_sb_info *sbi = autofs_sbi(path->dentry->d_sb); in autofs_mount_wait()
269 struct autofs_info *ino = autofs_dentry_ino(path->dentry); in autofs_mount_wait()
275 pr_debug("waiting for mount name=%pd\n", path->dentry); in autofs_mount_wait()
285 struct dentry *dentry = path->dentry; in do_expire_wait() local
286 struct dentry *expiring; in do_expire_wait()
288 expiring = autofs_lookup_expiring(dentry, rcu_walk); in do_expire_wait()
294 const struct path this = { .mnt = path->mnt, .dentry = expiring }; in do_expire_wait()
307 static struct dentry *autofs_mountpoint_changed(struct path *path) in autofs_mountpoint_changed()
309 struct dentry *dentry = path->dentry; in autofs_mountpoint_changed() local
310 struct autofs_sb_info *sbi = autofs_sbi(dentry->d_sb); in autofs_mountpoint_changed()
316 if (autofs_type_indirect(sbi->type) && d_unhashed(dentry)) { in autofs_mountpoint_changed()
317 struct dentry *parent = dentry->d_parent; in autofs_mountpoint_changed()
319 struct dentry *new; in autofs_mountpoint_changed()
321 new = d_lookup(parent, &dentry->d_name); in autofs_mountpoint_changed()
326 dput(path->dentry); in autofs_mountpoint_changed()
327 path->dentry = new; in autofs_mountpoint_changed()
329 return path->dentry; in autofs_mountpoint_changed()
334 struct dentry *dentry = path->dentry; in autofs_d_automount() local
335 struct autofs_sb_info *sbi = autofs_sbi(dentry->d_sb); in autofs_d_automount()
336 struct autofs_info *ino = autofs_dentry_ino(dentry); in autofs_d_automount()
339 pr_debug("dentry=%p %pd\n", dentry, dentry); in autofs_d_automount()
372 if (d_really_is_positive(dentry) && d_is_symlink(dentry)) { in autofs_d_automount()
395 if (!simple_empty(dentry)) { in autofs_d_automount()
413 dentry = autofs_mountpoint_changed(path); in autofs_d_automount()
414 if (!dentry) in autofs_d_automount()
422 struct dentry *dentry = path->dentry; in autofs_d_manage() local
423 struct autofs_sb_info *sbi = autofs_sbi(dentry->d_sb); in autofs_d_manage()
424 struct autofs_info *ino = autofs_dentry_ino(dentry); in autofs_d_manage()
427 pr_debug("dentry=%p %pd\n", dentry, dentry); in autofs_d_manage()
462 inode = d_inode_rcu(dentry); in autofs_d_manage()
465 if (list_empty(&dentry->d_subdirs)) in autofs_d_manage()
467 if (!simple_empty(dentry)) in autofs_d_manage()
487 if ((!path_is_mountpoint(path) && !simple_empty(dentry)) || in autofs_d_manage()
488 (d_really_is_positive(dentry) && d_is_symlink(dentry))) in autofs_d_manage()
497 static struct dentry *autofs_lookup(struct inode *dir, in autofs_lookup()
498 struct dentry *dentry, unsigned int flags) in autofs_lookup() argument
502 struct dentry *active; in autofs_lookup()
504 pr_debug("name = %pd\n", dentry); in autofs_lookup()
507 if (dentry->d_name.len > NAME_MAX) in autofs_lookup()
516 active = autofs_lookup_active(dentry); in autofs_lookup()
526 if (!autofs_oz_mode(sbi) && !IS_ROOT(dentry->d_parent)) in autofs_lookup()
530 if (IS_ROOT(dentry->d_parent) && in autofs_lookup()
532 __managed_dentry_set_managed(dentry); in autofs_lookup()
538 dentry->d_fsdata = ino; in autofs_lookup()
539 ino->dentry = dentry; in autofs_lookup()
541 autofs_add_active(dentry); in autofs_lookup()
547 struct dentry *dentry, in autofs_dir_symlink() argument
551 struct autofs_info *ino = autofs_dentry_ino(dentry); in autofs_dir_symlink()
557 pr_debug("%s <- %pd\n", symname, dentry); in autofs_dir_symlink()
573 autofs_del_active(dentry); in autofs_dir_symlink()
588 d_add(dentry, inode); in autofs_dir_symlink()
590 dget(dentry); in autofs_dir_symlink()
592 p_ino = autofs_dentry_ino(dentry->d_parent); in autofs_dir_symlink()
593 if (p_ino && !IS_ROOT(dentry)) in autofs_dir_symlink()
616 static int autofs_dir_unlink(struct inode *dir, struct dentry *dentry) in autofs_dir_unlink() argument
619 struct autofs_info *ino = autofs_dentry_ino(dentry); in autofs_dir_unlink()
633 p_ino = autofs_dentry_ino(dentry->d_parent); in autofs_dir_unlink()
634 if (p_ino && !IS_ROOT(dentry)) in autofs_dir_unlink()
637 dput(ino->dentry); in autofs_dir_unlink()
639 d_inode(dentry)->i_size = 0; in autofs_dir_unlink()
640 clear_nlink(d_inode(dentry)); in autofs_dir_unlink()
645 __autofs_add_expiring(dentry); in autofs_dir_unlink()
646 d_drop(dentry); in autofs_dir_unlink()
663 static void autofs_set_leaf_automount_flags(struct dentry *dentry) in autofs_set_leaf_automount_flags() argument
665 struct dentry *parent; in autofs_set_leaf_automount_flags()
668 if (IS_ROOT(dentry->d_parent)) in autofs_set_leaf_automount_flags()
671 managed_dentry_set_managed(dentry); in autofs_set_leaf_automount_flags()
673 parent = dentry->d_parent; in autofs_set_leaf_automount_flags()
680 static void autofs_clear_leaf_automount_flags(struct dentry *dentry) in autofs_clear_leaf_automount_flags() argument
683 struct dentry *parent; in autofs_clear_leaf_automount_flags()
686 if (IS_ROOT(dentry->d_parent)) in autofs_clear_leaf_automount_flags()
689 managed_dentry_clear_managed(dentry); in autofs_clear_leaf_automount_flags()
691 parent = dentry->d_parent; in autofs_clear_leaf_automount_flags()
695 d_child = &dentry->d_child; in autofs_clear_leaf_automount_flags()
702 static int autofs_dir_rmdir(struct inode *dir, struct dentry *dentry) in autofs_dir_rmdir() argument
705 struct autofs_info *ino = autofs_dentry_ino(dentry); in autofs_dir_rmdir()
708 pr_debug("dentry %p, removing %pd\n", dentry, dentry); in autofs_dir_rmdir()
721 if (!simple_empty(dentry)) { in autofs_dir_rmdir()
725 __autofs_add_expiring(dentry); in autofs_dir_rmdir()
726 d_drop(dentry); in autofs_dir_rmdir()
730 autofs_clear_leaf_automount_flags(dentry); in autofs_dir_rmdir()
733 p_ino = autofs_dentry_ino(dentry->d_parent); in autofs_dir_rmdir()
734 if (p_ino && dentry->d_parent != dentry) in autofs_dir_rmdir()
737 dput(ino->dentry); in autofs_dir_rmdir()
738 d_inode(dentry)->i_size = 0; in autofs_dir_rmdir()
739 clear_nlink(d_inode(dentry)); in autofs_dir_rmdir()
748 struct dentry *dentry, umode_t mode) in autofs_dir_mkdir() argument
751 struct autofs_info *ino = autofs_dentry_ino(dentry); in autofs_dir_mkdir()
765 pr_debug("dentry %p, creating %pd\n", dentry, dentry); in autofs_dir_mkdir()
771 autofs_del_active(dentry); in autofs_dir_mkdir()
776 d_add(dentry, inode); in autofs_dir_mkdir()
779 autofs_set_leaf_automount_flags(dentry); in autofs_dir_mkdir()
781 dget(dentry); in autofs_dir_mkdir()
783 p_ino = autofs_dentry_ino(dentry->d_parent); in autofs_dir_mkdir()
784 if (p_ino && !IS_ROOT(dentry)) in autofs_dir_mkdir()
878 int is_autofs_dentry(struct dentry *dentry) in is_autofs_dentry() argument
880 return dentry && d_really_is_positive(dentry) && in is_autofs_dentry()
881 dentry->d_op == &autofs_dentry_operations && in is_autofs_dentry()
882 dentry->d_fsdata != NULL; in is_autofs_dentry()