Lines Matching refs:dentry
14 static inline int autofs_can_expire(struct dentry *dentry, in autofs_can_expire() argument
17 struct autofs_info *ino = autofs_dentry_ino(dentry); in autofs_can_expire()
33 struct dentry *dentry, unsigned int how) in autofs_mount_busy() argument
35 struct dentry *top = dentry; in autofs_mount_busy()
36 struct path path = {.mnt = mnt, .dentry = dentry}; in autofs_mount_busy()
39 pr_debug("dentry %p %pd\n", dentry, dentry); in autofs_mount_busy()
46 if (is_autofs_dentry(path.dentry)) { in autofs_mount_busy()
47 struct autofs_sb_info *sbi = autofs_sbi(path.dentry->d_sb); in autofs_mount_busy()
79 static struct dentry *get_next_positive_subdir(struct dentry *prev, in get_next_positive_subdir()
80 struct dentry *root) in get_next_positive_subdir()
84 struct dentry *q; in get_next_positive_subdir()
104 q = list_entry(next, struct dentry, d_child); in get_next_positive_subdir()
126 static struct dentry *get_next_positive_dentry(struct dentry *prev, in get_next_positive_dentry()
127 struct dentry *root) in get_next_positive_dentry()
131 struct dentry *p, *ret; in get_next_positive_dentry()
144 struct dentry *parent; in get_next_positive_dentry()
166 ret = list_entry(next, struct dentry, d_child); in get_next_positive_dentry()
193 struct dentry *top, in autofs_direct_busy()
225 struct dentry *top, in autofs_tree_busy()
230 struct dentry *p; in autofs_tree_busy()
283 static struct dentry *autofs_check_leaves(struct vfsmount *mnt, in autofs_check_leaves()
284 struct dentry *parent, in autofs_check_leaves()
288 struct dentry *p; in autofs_check_leaves()
316 static struct dentry *autofs_expire_direct(struct super_block *sb, in autofs_expire_direct()
321 struct dentry *root = dget(sb->s_root); in autofs_expire_direct()
363 static struct dentry *should_expire(struct dentry *dentry, in should_expire() argument
368 struct autofs_info *ino = autofs_dentry_ino(dentry); in should_expire()
381 if (d_mountpoint(dentry)) { in should_expire()
382 pr_debug("checking mountpoint %p %pd\n", dentry, dentry); in should_expire()
385 if (autofs_mount_busy(mnt, dentry, how)) in should_expire()
392 return dentry; in should_expire()
395 if (autofs_can_expire(dentry, timeout, how)) in should_expire()
396 return dentry; in should_expire()
400 if (d_really_is_positive(dentry) && d_is_symlink(dentry)) { in should_expire()
401 pr_debug("checking symlink %p %pd\n", dentry, dentry); in should_expire()
405 return dentry; in should_expire()
411 if (autofs_can_expire(dentry, timeout, how)) in should_expire()
412 return dentry; in should_expire()
416 if (simple_empty(dentry)) in should_expire()
425 if (d_count(dentry) > ino_count) in should_expire()
429 if (!autofs_tree_busy(mnt, dentry, timeout, how)) in should_expire()
430 return dentry; in should_expire()
436 struct dentry *expired; in should_expire()
442 if (d_count(dentry) > ino_count) in should_expire()
446 expired = autofs_check_leaves(mnt, dentry, timeout, how); in should_expire()
448 if (expired == dentry) in should_expire()
449 dput(dentry); in should_expire()
462 static struct dentry *autofs_expire_indirect(struct super_block *sb, in autofs_expire_indirect()
468 struct dentry *root = sb->s_root; in autofs_expire_indirect()
469 struct dentry *dentry; in autofs_expire_indirect() local
470 struct dentry *expired; in autofs_expire_indirect()
471 struct dentry *found; in autofs_expire_indirect()
479 dentry = NULL; in autofs_expire_indirect()
480 while ((dentry = get_next_positive_subdir(dentry, root))) { in autofs_expire_indirect()
482 ino = autofs_dentry_ino(dentry); in autofs_expire_indirect()
489 expired = should_expire(dentry, mnt, timeout, how); in autofs_expire_indirect()
508 if (expired != dentry) in autofs_expire_indirect()
509 dput(dentry); in autofs_expire_indirect()
517 if (expired != dentry) in autofs_expire_indirect()
532 struct dentry *dentry = path->dentry; in autofs_expire_wait() local
533 struct autofs_sb_info *sbi = autofs_sbi(dentry->d_sb); in autofs_expire_wait()
534 struct autofs_info *ino = autofs_dentry_ino(dentry); in autofs_expire_wait()
559 pr_debug("waiting for expire %p name=%pd\n", dentry, dentry); in autofs_expire_wait()
566 if (d_unhashed(dentry)) in autofs_expire_wait()
584 struct dentry *dentry; in autofs_expire_run() local
592 dentry = autofs_expire_indirect(sb, mnt, sbi, 0); in autofs_expire_run()
593 if (!dentry) in autofs_expire_run()
596 pkt.len = dentry->d_name.len; in autofs_expire_run()
597 memcpy(pkt.name, dentry->d_name.name, pkt.len); in autofs_expire_run()
599 dput(dentry); in autofs_expire_run()
605 ino = autofs_dentry_ino(dentry); in autofs_expire_run()
618 struct dentry *dentry; in autofs_do_expire_multi() local
622 dentry = autofs_expire_direct(sb, mnt, sbi, how); in autofs_do_expire_multi()
624 dentry = autofs_expire_indirect(sb, mnt, sbi, how); in autofs_do_expire_multi()
626 if (dentry) { in autofs_do_expire_multi()
627 struct autofs_info *ino = autofs_dentry_ino(dentry); in autofs_do_expire_multi()
628 const struct path path = { .mnt = mnt, .dentry = dentry }; in autofs_do_expire_multi()
641 dput(dentry); in autofs_do_expire_multi()