Lines Matching full:parent

21 static DEFINE_SPINLOCK(kernfs_rename_lock);	/* kn->parent and ->name */
47 return strlcpy(buf, kn->parent ? kn->name : "/", buflen); in kernfs_name_locked()
55 while (to->parent && to != from) { in kernfs_depth()
57 to = to->parent; in kernfs_depth()
75 a = a->parent; in kernfs_common_ancestor()
79 b = b->parent; in kernfs_common_ancestor()
85 b = b->parent; in kernfs_common_ancestor()
86 a = a->parent; in kernfs_common_ancestor()
159 kn = kn->parent; in kernfs_path_from_node_locked()
196 * @from: parent kernfs_node relative to which we need to build the path
202 * be on the same kernfs-root. If @from is not parent of @to, then a relative
273 * kernfs_get_parent - determine the parent node and pin it
276 * Determines @kn's parent, pins and returns it. This function can be
281 struct kernfs_node *parent; in kernfs_get_parent() local
285 parent = kn->parent; in kernfs_get_parent()
286 kernfs_get(parent); in kernfs_get_parent()
289 return parent; in kernfs_get_parent()
340 * @kn->parent->dir.children.
350 struct rb_node **node = &kn->parent->dir.children.rb_node; in kernfs_link_sibling()
351 struct rb_node *parent = NULL; in kernfs_link_sibling() local
358 parent = *node; in kernfs_link_sibling()
369 rb_link_node(&kn->rb, parent, node); in kernfs_link_sibling()
370 rb_insert_color(&kn->rb, &kn->parent->dir.children); in kernfs_link_sibling()
374 kn->parent->dir.subdirs++; in kernfs_link_sibling()
375 kernfs_inc_rev(kn->parent); in kernfs_link_sibling()
385 * kn->parent->dir.children. Returns %true if @kn was actually
397 kn->parent->dir.subdirs--; in kernfs_unlink_sibling()
398 kernfs_inc_rev(kn->parent); in kernfs_unlink_sibling()
400 rb_erase(&kn->rb, &kn->parent->dir.children); in kernfs_unlink_sibling()
510 struct kernfs_node *parent; in kernfs_put() local
519 * kn->parent won't change beneath us. in kernfs_put()
521 parent = kn->parent; in kernfs_put()
525 parent ? parent->name : "", kn->name, atomic_read(&kn->active)); in kernfs_put()
541 kn = parent; in kernfs_put()
572 struct kernfs_node *parent, in __kernfs_new_node() argument
623 if (parent) { in __kernfs_new_node()
624 ret = security_kernfs_init_security(parent, kn); in __kernfs_new_node()
640 struct kernfs_node *kernfs_new_node(struct kernfs_node *parent, in kernfs_new_node() argument
647 kn = __kernfs_new_node(kernfs_root(parent), parent, in kernfs_new_node()
650 kernfs_get(parent); in kernfs_new_node()
651 kn->parent = parent; in kernfs_new_node()
707 * kernfs_add_one - add kernfs_node to parent without warning
710 * The caller must already have initialized @kn->parent. This
711 * function increments nlink of the parent's inode if @kn is a
712 * directory and link into the children list of the parent.
720 struct kernfs_node *parent = kn->parent; in kernfs_add_one() local
728 has_ns = kernfs_ns_enabled(parent); in kernfs_add_one()
730 has_ns ? "required" : "invalid", parent->name, kn->name)) in kernfs_add_one()
733 if (kernfs_type(parent) != KERNFS_DIR) in kernfs_add_one()
737 if (parent->flags & KERNFS_EMPTY_DIR) in kernfs_add_one()
740 if ((parent->flags & KERNFS_ACTIVATED) && !kernfs_active(parent)) in kernfs_add_one()
749 /* Update timestamps on the parent */ in kernfs_add_one()
750 ps_iattr = parent->iattr; in kernfs_add_one()
776 * @parent: kernfs_node to search under
780 * Look for kernfs_node with name @name under @parent. Returns pointer to
783 static struct kernfs_node *kernfs_find_ns(struct kernfs_node *parent, in kernfs_find_ns() argument
787 struct rb_node *node = parent->dir.children.rb_node; in kernfs_find_ns()
788 bool has_ns = kernfs_ns_enabled(parent); in kernfs_find_ns()
795 has_ns ? "required" : "invalid", parent->name, name); in kernfs_find_ns()
816 static struct kernfs_node *kernfs_walk_ns(struct kernfs_node *parent, in kernfs_walk_ns() argument
837 while ((name = strsep(&p, "/")) && parent) { in kernfs_walk_ns()
840 parent = kernfs_find_ns(parent, name, ns); in kernfs_walk_ns()
845 return parent; in kernfs_walk_ns()
850 * @parent: kernfs_node to search under
854 * Look for kernfs_node with name @name under @parent and get a reference
858 struct kernfs_node *kernfs_find_and_get_ns(struct kernfs_node *parent, in kernfs_find_and_get_ns() argument
864 kn = kernfs_find_ns(parent, name, ns); in kernfs_find_and_get_ns()
874 * @parent: kernfs_node to search under
878 * Look for kernfs_node with path @path under @parent and get a reference
882 struct kernfs_node *kernfs_walk_and_get_ns(struct kernfs_node *parent, in kernfs_walk_and_get_ns() argument
888 kn = kernfs_walk_ns(parent, path, ns); in kernfs_walk_and_get_ns()
965 * @parent: parent in which to create a new directory
975 struct kernfs_node *kernfs_create_dir_ns(struct kernfs_node *parent, in kernfs_create_dir_ns() argument
984 kn = kernfs_new_node(parent, name, mode | S_IFDIR, in kernfs_create_dir_ns()
989 kn->dir.root = parent->dir.root; in kernfs_create_dir_ns()
1004 * @parent: parent in which to create a new directory
1009 struct kernfs_node *kernfs_create_empty_dir(struct kernfs_node *parent, in kernfs_create_empty_dir() argument
1016 kn = kernfs_new_node(parent, name, S_IRUGO|S_IXUGO|S_IFDIR, in kernfs_create_empty_dir()
1022 kn->dir.root = parent->dir.root; in kernfs_create_empty_dir()
1044 struct kernfs_node *parent; in kernfs_dop_revalidate() local
1046 /* If the kernfs parent node has changed discard and in kernfs_dop_revalidate()
1051 parent = kernfs_dentry_node(dentry->d_parent); in kernfs_dop_revalidate()
1052 if (parent) { in kernfs_dop_revalidate()
1053 if (kernfs_dir_changed(parent, dentry)) { in kernfs_dop_revalidate()
1062 /* The kernfs parent node hasn't changed, leave the in kernfs_dop_revalidate()
1076 if (kernfs_dentry_node(dentry->d_parent) != kn->parent) in kernfs_dop_revalidate()
1084 if (kn->parent && kernfs_ns_enabled(kn->parent) && in kernfs_dop_revalidate()
1103 struct kernfs_node *parent = dir->i_private; in kernfs_iop_lookup() local
1109 if (kernfs_ns_enabled(parent)) in kernfs_iop_lookup()
1112 kn = kernfs_find_ns(parent, dentry->d_name.name, ns); in kernfs_iop_lookup()
1133 kernfs_set_rev(parent, dentry); in kernfs_iop_lookup()
1144 struct kernfs_node *parent = dir->i_private; in kernfs_iop_mkdir() local
1145 struct kernfs_syscall_ops *scops = kernfs_root(parent)->syscall_ops; in kernfs_iop_mkdir()
1151 if (!kernfs_get_active(parent)) in kernfs_iop_mkdir()
1154 ret = scops->mkdir(parent, dentry->d_name.name, mode); in kernfs_iop_mkdir()
1156 kernfs_put_active(parent); in kernfs_iop_mkdir()
1272 /* no sibling left, visit parent */ in kernfs_next_descendant_post()
1273 return pos->parent; in kernfs_next_descendant_post()
1300 WARN_ON_ONCE(pos->parent && RB_EMPTY_NODE(&pos->rb)); in kernfs_activate()
1321 if (!kn || (kn->parent && RB_EMPTY_NODE(&kn->rb))) in __kernfs_remove()
1359 if (!pos->parent || kernfs_unlink_sibling(pos)) { in __kernfs_remove()
1361 pos->parent ? pos->parent->iattr : NULL; in __kernfs_remove()
1363 /* update timestamps on the parent */ in __kernfs_remove()
1522 * @parent: parent of the target
1526 * Look for the kernfs_node with @name and @ns under @parent and remove it.
1529 int kernfs_remove_by_name_ns(struct kernfs_node *parent, const char *name, in kernfs_remove_by_name_ns() argument
1534 if (!parent) { in kernfs_remove_by_name_ns()
1542 kn = kernfs_find_ns(parent, name, ns); in kernfs_remove_by_name_ns()
1557 * @new_parent: new parent to put @sd under
1569 if (!kn->parent) in kernfs_rename_ns()
1580 if ((kn->parent == new_parent) && (kn->ns == new_ns) && in kernfs_rename_ns()
1604 /* rename_lock protects ->parent and ->name accessors */ in kernfs_rename_ns()
1607 old_parent = kn->parent; in kernfs_rename_ns()
1608 kn->parent = new_parent; in kernfs_rename_ns()
1643 struct kernfs_node *parent, loff_t hash, struct kernfs_node *pos) in kernfs_dir_pos() argument
1647 pos->parent == parent && hash == pos->hash; in kernfs_dir_pos()
1653 struct rb_node *node = parent->dir.children.rb_node; in kernfs_dir_pos()
1677 struct kernfs_node *parent, ino_t ino, struct kernfs_node *pos) in kernfs_dir_next_pos() argument
1679 pos = kernfs_dir_pos(ns, parent, ino, pos); in kernfs_dir_next_pos()
1695 struct kernfs_node *parent = kernfs_dentry_node(dentry); in kernfs_fop_readdir() local
1703 if (kernfs_ns_enabled(parent)) in kernfs_fop_readdir()
1706 for (pos = kernfs_dir_pos(ns, parent, ctx->pos, pos); in kernfs_fop_readdir()
1708 pos = kernfs_dir_next_pos(ns, parent, ctx->pos, pos)) { in kernfs_fop_readdir()