Lines Matching refs:parent
111 static inline struct hlist_bl_head *in_lookup_hash(const struct dentry *parent, in in_lookup_hash() argument
114 hash += (unsigned long) parent / L1_CACHE_BYTES; in in_lookup_hash()
544 static inline void dentry_unlist(struct dentry *dentry, struct dentry *parent) in dentry_unlist() argument
574 while (dentry->d_child.next != &parent->d_subdirs) { in dentry_unlist()
584 struct dentry *parent = NULL; in __dentry_kill() local
587 parent = dentry->d_parent; in __dentry_kill()
607 dentry_unlist(dentry, parent); in __dentry_kill()
608 if (parent) in __dentry_kill()
609 spin_unlock(&parent->d_lock); in __dentry_kill()
631 struct dentry *parent; in __lock_parent() local
635 parent = READ_ONCE(dentry->d_parent); in __lock_parent()
636 spin_lock(&parent->d_lock); in __lock_parent()
645 if (unlikely(parent != dentry->d_parent)) { in __lock_parent()
646 spin_unlock(&parent->d_lock); in __lock_parent()
650 if (parent != dentry) in __lock_parent()
653 parent = NULL; in __lock_parent()
654 return parent; in __lock_parent()
659 struct dentry *parent = dentry->d_parent; in lock_parent() local
662 if (likely(spin_trylock(&parent->d_lock))) in lock_parent()
663 return parent; in lock_parent()
719 struct dentry *parent = NULL; in dentry_kill() local
725 parent = dentry->d_parent; in dentry_kill()
726 if (unlikely(!spin_trylock(&parent->d_lock))) { in dentry_kill()
727 parent = __lock_parent(dentry); in dentry_kill()
731 if (parent) in dentry_kill()
732 spin_unlock(&parent->d_lock); in dentry_kill()
738 return parent; in dentry_kill()
744 parent = lock_parent(dentry); in dentry_kill()
750 return parent; in dentry_kill()
755 if (parent) in dentry_kill()
756 spin_unlock(&parent->d_lock); in dentry_kill()
1115 struct dentry *parent = lock_parent(dentry); in d_prune_aliases() local
1118 dput(parent); in d_prune_aliases()
1121 if (parent) in d_prune_aliases()
1122 spin_unlock(&parent->d_lock); in d_prune_aliases()
1144 struct dentry *parent; in shrink_lock_dentry() local
1161 parent = dentry->d_parent; in shrink_lock_dentry()
1162 if (IS_ROOT(dentry) || likely(spin_trylock(&parent->d_lock))) in shrink_lock_dentry()
1166 spin_lock(&parent->d_lock); in shrink_lock_dentry()
1167 if (unlikely(parent != dentry->d_parent)) { in shrink_lock_dentry()
1168 spin_unlock(&parent->d_lock); in shrink_lock_dentry()
1175 spin_unlock(&parent->d_lock); in shrink_lock_dentry()
1185 struct dentry *dentry, *parent; in shrink_dentry_list() local
1203 parent = dentry->d_parent; in shrink_dentry_list()
1204 if (parent != dentry) in shrink_dentry_list()
1205 __dput_to_list(parent, list); in shrink_dentry_list()
1353 static void d_walk(struct dentry *parent, void *data, in d_walk() argument
1364 this_parent = parent; in d_walk()
1420 if (this_parent != parent) { in d_walk()
1486 int path_has_submounts(const struct path *parent) in path_has_submounts() argument
1488 struct check_mount data = { .mnt = parent->mnt, .mounted = 0 }; in path_has_submounts()
1491 d_walk(parent->dentry, &data, path_check_mount); in path_has_submounts()
1624 void shrink_dcache_parent(struct dentry *parent) in shrink_dcache_parent() argument
1627 struct select_data data = {.start = parent}; in shrink_dcache_parent()
1630 d_walk(parent, &data, select_collect); in shrink_dcache_parent()
1641 d_walk(parent, &data, select_collect2); in shrink_dcache_parent()
1643 struct dentry *parent; in shrink_dcache_parent() local
1650 parent = data.victim->d_parent; in shrink_dcache_parent()
1651 if (parent != data.victim) in shrink_dcache_parent()
1652 __dput_to_list(parent, &data.dispose); in shrink_dcache_parent()
1851 struct dentry *d_alloc(struct dentry * parent, const struct qstr *name) in d_alloc() argument
1853 struct dentry *dentry = __d_alloc(parent->d_sb, name); in d_alloc()
1856 spin_lock(&parent->d_lock); in d_alloc()
1861 __dget_dlock(parent); in d_alloc()
1862 dentry->d_parent = parent; in d_alloc()
1863 list_add(&dentry->d_child, &parent->d_subdirs); in d_alloc()
1864 spin_unlock(&parent->d_lock); in d_alloc()
1876 struct dentry *d_alloc_cursor(struct dentry * parent) in d_alloc_cursor() argument
1878 struct dentry *dentry = d_alloc_anon(parent->d_sb); in d_alloc_cursor()
1881 dentry->d_parent = dget(parent); in d_alloc_cursor()
1909 struct dentry *d_alloc_name(struct dentry *parent, const char *name) in d_alloc_name() argument
1914 q.hash_len = hashlen_string(parent, name); in d_alloc_name()
1915 return d_alloc(parent, &q); in d_alloc_name()
2265 bool d_same_name(const struct dentry *dentry, const struct dentry *parent, in d_same_name() argument
2268 if (likely(!(parent->d_flags & DCACHE_OP_COMPARE))) { in d_same_name()
2273 return parent->d_op->d_compare(dentry, in d_same_name()
2284 const struct dentry *parent, in __d_lookup_rcu_op_compare() argument
2300 if (dentry->d_parent != parent) in __d_lookup_rcu_op_compare()
2313 if (parent->d_op->d_compare(dentry, tlen, tname, name) != 0) in __d_lookup_rcu_op_compare()
2350 struct dentry *__d_lookup_rcu(const struct dentry *parent, in __d_lookup_rcu() argument
2367 if (unlikely(parent->d_flags & DCACHE_OP_COMPARE)) in __d_lookup_rcu()
2368 return __d_lookup_rcu_op_compare(parent, name, seqp); in __d_lookup_rcu()
2404 if (dentry->d_parent != parent) in __d_lookup_rcu()
2429 struct dentry *d_lookup(const struct dentry *parent, const struct qstr *name) in d_lookup() argument
2436 dentry = __d_lookup(parent, name); in d_lookup()
2459 struct dentry *__d_lookup(const struct dentry *parent, const struct qstr *name) in __d_lookup() argument
2495 if (dentry->d_parent != parent) in __d_lookup()
2500 if (!d_same_name(dentry, parent, name)) in __d_lookup()
2637 struct dentry *d_alloc_parallel(struct dentry *parent, in d_alloc_parallel() argument
2642 struct hlist_bl_head *b = in_lookup_hash(parent, hash); in d_alloc_parallel()
2644 struct dentry *new = d_alloc(parent, name); in d_alloc_parallel()
2653 seq = smp_load_acquire(&parent->d_inode->i_dir_seq); in d_alloc_parallel()
2655 dentry = __d_lookup_rcu(parent, name, &d_seq); in d_alloc_parallel()
2681 if (unlikely(READ_ONCE(parent->d_inode->i_dir_seq) != seq)) { in d_alloc_parallel()
2696 if (dentry->d_parent != parent) in d_alloc_parallel()
2698 if (!d_same_name(dentry, parent, name)) in d_alloc_parallel()
2722 if (unlikely(dentry->d_parent != parent)) in d_alloc_parallel()
2726 if (unlikely(!d_same_name(dentry, parent, name))) in d_alloc_parallel()
3248 void d_genocide(struct dentry *parent) in d_genocide() argument
3250 d_walk(parent, parent, d_genocide_kill); in d_genocide()