Lines Matching refs:dentry

20 static inline int autofs4_can_expire(struct dentry *dentry,  in autofs4_can_expire()  argument
23 struct autofs_info *ino = autofs4_dentry_ino(dentry); in autofs4_can_expire()
38 static int autofs4_mount_busy(struct vfsmount *mnt, struct dentry *dentry) in autofs4_mount_busy() argument
40 struct dentry *top = dentry; in autofs4_mount_busy()
41 struct path path = {.mnt = mnt, .dentry = dentry}; in autofs4_mount_busy()
44 DPRINTK("dentry %p %pd", dentry, dentry); in autofs4_mount_busy()
51 if (is_autofs4_dentry(path.dentry)) { in autofs4_mount_busy()
52 struct autofs_sb_info *sbi = autofs4_sbi(path.dentry->d_sb); in autofs4_mount_busy()
76 static struct dentry *get_next_positive_subdir(struct dentry *prev, in get_next_positive_subdir()
77 struct dentry *root) in get_next_positive_subdir()
81 struct dentry *q; in get_next_positive_subdir()
101 q = list_entry(next, struct dentry, d_child); in get_next_positive_subdir()
123 static struct dentry *get_next_positive_dentry(struct dentry *prev, in get_next_positive_dentry()
124 struct dentry *root) in get_next_positive_dentry()
128 struct dentry *p, *ret; in get_next_positive_dentry()
141 struct dentry *parent; in get_next_positive_dentry()
163 ret = list_entry(next, struct dentry, d_child); in get_next_positive_dentry()
190 struct dentry *top, in autofs4_direct_busy()
215 struct dentry *top, in autofs4_tree_busy()
220 struct dentry *p; in autofs4_tree_busy()
269 static struct dentry *autofs4_check_leaves(struct vfsmount *mnt, in autofs4_check_leaves()
270 struct dentry *parent, in autofs4_check_leaves()
274 struct dentry *p; in autofs4_check_leaves()
296 struct dentry *autofs4_expire_direct(struct super_block *sb, in autofs4_expire_direct()
302 struct dentry *root = dget(sb->s_root); in autofs4_expire_direct()
344 static struct dentry *should_expire(struct dentry *dentry, in should_expire() argument
351 struct autofs_info *ino = autofs4_dentry_ino(dentry); in should_expire()
364 if (d_mountpoint(dentry)) { in should_expire()
365 DPRINTK("checking mountpoint %p %pd", dentry, dentry); in should_expire()
368 if (autofs4_mount_busy(mnt, dentry)) in should_expire()
372 if (autofs4_can_expire(dentry, timeout, do_now)) in should_expire()
373 return dentry; in should_expire()
377 if (d_really_is_positive(dentry) && d_is_symlink(dentry)) { in should_expire()
378 DPRINTK("checking symlink %p %pd", dentry, dentry); in should_expire()
383 if (autofs4_can_expire(dentry, timeout, do_now)) in should_expire()
384 return dentry; in should_expire()
388 if (simple_empty(dentry)) in should_expire()
395 if (d_count(dentry) > ino_count) in should_expire()
398 if (!autofs4_tree_busy(mnt, dentry, timeout, do_now)) in should_expire()
399 return dentry; in should_expire()
406 struct dentry *expired; in should_expire()
408 if (d_count(dentry) > ino_count) in should_expire()
411 expired = autofs4_check_leaves(mnt, dentry, timeout, do_now); in should_expire()
413 if (expired == dentry) in should_expire()
414 dput(dentry); in should_expire()
426 struct dentry *autofs4_expire_indirect(struct super_block *sb, in autofs4_expire_indirect()
432 struct dentry *root = sb->s_root; in autofs4_expire_indirect()
433 struct dentry *dentry; in autofs4_expire_indirect() local
434 struct dentry *expired; in autofs4_expire_indirect()
443 dentry = NULL; in autofs4_expire_indirect()
444 while ((dentry = get_next_positive_subdir(dentry, root))) { in autofs4_expire_indirect()
446 ino = autofs4_dentry_ino(dentry); in autofs4_expire_indirect()
450 expired = should_expire(dentry, mnt, timeout, how); in autofs4_expire_indirect()
461 if (expired != dentry) in autofs4_expire_indirect()
462 dput(dentry); in autofs4_expire_indirect()
467 if (expired != dentry) in autofs4_expire_indirect()
490 int autofs4_expire_wait(struct dentry *dentry, int rcu_walk) in autofs4_expire_wait() argument
492 struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb); in autofs4_expire_wait()
493 struct autofs_info *ino = autofs4_dentry_ino(dentry); in autofs4_expire_wait()
506 DPRINTK("waiting for expire %p name=%pd", dentry, dentry); in autofs4_expire_wait()
508 status = autofs4_wait(sbi, dentry, NFY_NONE); in autofs4_expire_wait()
513 if (d_unhashed(dentry)) in autofs4_expire_wait()
531 struct dentry *dentry; in autofs4_expire_run() local
539 if ((dentry = autofs4_expire_indirect(sb, mnt, sbi, 0)) == NULL) in autofs4_expire_run()
542 pkt.len = dentry->d_name.len; in autofs4_expire_run()
543 memcpy(pkt.name, dentry->d_name.name, pkt.len); in autofs4_expire_run()
545 dput(dentry); in autofs4_expire_run()
551 ino = autofs4_dentry_ino(dentry); in autofs4_expire_run()
564 struct dentry *dentry; in autofs4_do_expire_multi() local
568 dentry = autofs4_expire_direct(sb, mnt, sbi, when); in autofs4_do_expire_multi()
570 dentry = autofs4_expire_indirect(sb, mnt, sbi, when); in autofs4_do_expire_multi()
572 if (dentry) { in autofs4_do_expire_multi()
573 struct autofs_info *ino = autofs4_dentry_ino(dentry); in autofs4_do_expire_multi()
577 ret = autofs4_wait(sbi, dentry, NFY_EXPIRE); in autofs4_do_expire_multi()
585 dput(dentry); in autofs4_do_expire_multi()