Lines Matching refs:parent
20 static DEFINE_RWLOCK(kernfs_rename_lock); /* kn->parent and ->name */
59 return strlcpy(buf, kn->parent ? kn->name : "/", buflen);
67 while (to->parent && to != from) {
69 to = to->parent;
87 a = a->parent;
91 b = b->parent;
97 b = b->parent;
98 a = a->parent;
168 kn = kn->parent;
207 * @from: parent kernfs_node relative to which we need to build the path
213 * be on the same kernfs-root. If @from is not parent of @to, then a relative
284 * kernfs_get_parent - determine the parent node and pin it
287 * Determines @kn's parent, pins and returns it. This function can be
290 * Return: parent node of @kn
294 struct kernfs_node *parent;
298 parent = kn->parent;
299 kernfs_get(parent);
302 return parent;
353 * @kn->parent->dir.children.
363 struct rb_node **node = &kn->parent->dir.children.rb_node;
364 struct rb_node *parent = NULL;
371 parent = *node;
382 rb_link_node(&kn->rb, parent, node);
383 rb_insert_color(&kn->rb, &kn->parent->dir.children);
388 kn->parent->dir.subdirs++;
389 kernfs_inc_rev(kn->parent);
400 * kn->parent->dir.children.
415 kn->parent->dir.subdirs--;
416 kernfs_inc_rev(kn->parent);
419 rb_erase(&kn->rb, &kn->parent->dir.children);
540 struct kernfs_node *parent;
549 * kn->parent won't change beneath us.
551 parent = kn->parent;
555 parent ? parent->name : "", kn->name, atomic_read(&kn->active));
571 kn = parent;
602 struct kernfs_node *parent,
653 if (parent) {
654 ret = security_kernfs_init_security(parent, kn);
672 struct kernfs_node *kernfs_new_node(struct kernfs_node *parent,
679 if (parent->mode & S_ISGID) {
684 if (parent->iattr)
685 gid = parent->iattr->ia_gid;
691 kn = __kernfs_new_node(kernfs_root(parent), parent,
694 kernfs_get(parent);
695 kn->parent = parent;
750 * kernfs_add_one - add kernfs_node to parent without warning
753 * The caller must already have initialized @kn->parent. This
754 * function increments nlink of the parent's inode if @kn is a
755 * directory and link into the children list of the parent.
763 struct kernfs_node *parent = kn->parent;
764 struct kernfs_root *root = kernfs_root(parent);
772 has_ns = kernfs_ns_enabled(parent);
774 has_ns ? "required" : "invalid", parent->name, kn->name))
777 if (kernfs_type(parent) != KERNFS_DIR)
781 if (parent->flags & (KERNFS_REMOVING | KERNFS_EMPTY_DIR))
790 /* Update timestamps on the parent */
793 ps_iattr = parent->iattr;
820 * @parent: kernfs_node to search under
824 * Look for kernfs_node with name @name under @parent.
828 static struct kernfs_node *kernfs_find_ns(struct kernfs_node *parent,
832 struct rb_node *node = parent->dir.children.rb_node;
833 bool has_ns = kernfs_ns_enabled(parent);
836 lockdep_assert_held(&kernfs_root(parent)->kernfs_rwsem);
840 has_ns ? "required" : "invalid", parent->name, name);
861 static struct kernfs_node *kernfs_walk_ns(struct kernfs_node *parent,
868 lockdep_assert_held_read(&kernfs_root(parent)->kernfs_rwsem);
881 while ((name = strsep(&p, "/")) && parent) {
884 parent = kernfs_find_ns(parent, name, ns);
889 return parent;
894 * @parent: kernfs_node to search under
898 * Look for kernfs_node with name @name under @parent and get a reference
903 struct kernfs_node *kernfs_find_and_get_ns(struct kernfs_node *parent,
907 struct kernfs_root *root = kernfs_root(parent);
910 kn = kernfs_find_ns(parent, name, ns);
920 * @parent: kernfs_node to search under
924 * Look for kernfs_node with path @path under @parent and get a reference
929 struct kernfs_node *kernfs_walk_and_get_ns(struct kernfs_node *parent,
933 struct kernfs_root *root = kernfs_root(parent);
936 kn = kernfs_walk_ns(parent, path, ns);
1033 * @parent: parent in which to create a new directory
1043 struct kernfs_node *kernfs_create_dir_ns(struct kernfs_node *parent,
1052 kn = kernfs_new_node(parent, name, mode | S_IFDIR,
1057 kn->dir.root = parent->dir.root;
1072 * @parent: parent in which to create a new directory
1077 struct kernfs_node *kernfs_create_empty_dir(struct kernfs_node *parent,
1084 kn = kernfs_new_node(parent, name, S_IRUGO|S_IXUGO|S_IFDIR,
1090 kn->dir.root = parent->dir.root;
1113 struct kernfs_node *parent;
1115 /* If the kernfs parent node has changed discard and
1119 * dentry parent, even if a concurrent rename is in
1133 parent = kernfs_dentry_node(dentry->d_parent);
1134 if (parent) {
1135 if (kernfs_dir_changed(parent, dentry)) {
1142 /* The kernfs parent node hasn't changed, leave the
1157 if (kernfs_dentry_node(dentry->d_parent) != kn->parent)
1165 if (kn->parent && kernfs_ns_enabled(kn->parent) &&
1184 struct kernfs_node *parent = dir->i_private;
1190 root = kernfs_root(parent);
1192 if (kernfs_ns_enabled(parent))
1195 kn = kernfs_find_ns(parent, dentry->d_name.name, ns);
1216 kernfs_set_rev(parent, dentry);
1227 struct kernfs_node *parent = dir->i_private;
1228 struct kernfs_syscall_ops *scops = kernfs_root(parent)->syscall_ops;
1234 if (!kernfs_get_active(parent))
1237 ret = scops->mkdir(parent, dentry->d_name.name, mode);
1239 kernfs_put_active(parent);
1357 /* no sibling left, visit parent */
1358 return pos->parent;
1370 WARN_ON_ONCE(kn->parent && RB_EMPTY_NODE(&kn->rb));
1452 if (kn->parent && RB_EMPTY_NODE(&kn->rb))
1483 if (!pos->parent || kernfs_unlink_sibling(pos)) {
1485 pos->parent ? pos->parent->iattr : NULL;
1487 /* update timestamps on the parent */
1659 * @parent: parent of the target
1663 * Look for the kernfs_node with @name and @ns under @parent and remove it.
1667 int kernfs_remove_by_name_ns(struct kernfs_node *parent, const char *name,
1673 if (!parent) {
1679 root = kernfs_root(parent);
1682 kn = kernfs_find_ns(parent, name, ns);
1700 * @new_parent: new parent to put @sd under
1715 if (!kn->parent)
1727 if ((kn->parent == new_parent) && (kn->ns == new_ns) &&
1751 /* rename_lock protects ->parent and ->name accessors */
1754 old_parent = kn->parent;
1755 kn->parent = new_parent;
1784 struct kernfs_node *parent, loff_t hash, struct kernfs_node *pos)
1788 pos->parent == parent && hash == pos->hash;
1794 struct rb_node *node = parent->dir.children.rb_node;
1818 struct kernfs_node *parent, ino_t ino, struct kernfs_node *pos)
1820 pos = kernfs_dir_pos(ns, parent, ino, pos);
1836 struct kernfs_node *parent = kernfs_dentry_node(dentry);
1844 root = kernfs_root(parent);
1847 if (kernfs_ns_enabled(parent))
1850 for (pos = kernfs_dir_pos(ns, parent, ctx->pos, pos);
1852 pos = kernfs_dir_next_pos(ns, parent, ctx->pos, pos)) {