Searched refs:kn (Results 1 - 22 of 22) sorted by relevance

/linux-4.1.27/fs/kernfs/
H A Dsymlink.c29 struct kernfs_node *kn; kernfs_create_link() local
32 kn = kernfs_new_node(parent, name, S_IFLNK|S_IRWXUGO, KERNFS_LINK); kernfs_create_link()
33 if (!kn) kernfs_create_link()
37 kn->ns = target->ns; kernfs_create_link()
38 kn->symlink.target_kn = target; kernfs_create_link()
41 error = kernfs_add_one(kn); kernfs_create_link()
43 return kn; kernfs_create_link()
45 kernfs_put(kn); kernfs_create_link()
52 struct kernfs_node *base, *kn; kernfs_get_target_path() local
59 kn = target->parent; kernfs_get_target_path()
60 while (kn->parent && base != kn) kernfs_get_target_path()
61 kn = kn->parent; kernfs_get_target_path()
63 if (base == kn) kernfs_get_target_path()
72 kn = target; kernfs_get_target_path()
73 while (kn->parent && kn != base) { kernfs_get_target_path()
74 len += strlen(kn->name) + 1; kernfs_get_target_path()
75 kn = kn->parent; kernfs_get_target_path()
86 kn = target; kernfs_get_target_path()
87 while (kn->parent && kn != base) { kernfs_get_target_path()
88 int slen = strlen(kn->name); kernfs_get_target_path()
91 strncpy(s + len, kn->name, slen); kernfs_get_target_path()
95 kn = kn->parent; kernfs_get_target_path()
103 struct kernfs_node *kn = dentry->d_fsdata; kernfs_getlink() local
104 struct kernfs_node *parent = kn->parent; kernfs_getlink()
105 struct kernfs_node *target = kn->symlink.target_kn; kernfs_getlink()
H A Ddir.c22 static DEFINE_SPINLOCK(kernfs_rename_lock); /* kn->parent and ->name */
27 static bool kernfs_active(struct kernfs_node *kn) kernfs_active() argument
30 return atomic_read(&kn->active) >= 0; kernfs_active()
33 static bool kernfs_lockdep(struct kernfs_node *kn) kernfs_lockdep() argument
36 return kn->flags & KERNFS_LOCKDEP; kernfs_lockdep()
42 static int kernfs_name_locked(struct kernfs_node *kn, char *buf, size_t buflen) kernfs_name_locked() argument
44 return strlcpy(buf, kn->parent ? kn->name : "/", buflen); kernfs_name_locked()
47 static char * __must_check kernfs_path_locked(struct kernfs_node *kn, char *buf, kernfs_path_locked() argument
56 len = strlen(kn->name); kernfs_path_locked()
63 memcpy(p, kn->name, len); kernfs_path_locked()
65 kn = kn->parent; kernfs_path_locked()
66 } while (kn && kn->parent); kernfs_path_locked()
73 * @kn: kernfs_node of interest
74 * @buf: buffer to copy @kn's name into
77 * Copies the name of @kn into @buf of @buflen bytes. The behavior is
78 * similar to strlcpy(). It returns the length of @kn's name and if @buf
83 int kernfs_name(struct kernfs_node *kn, char *buf, size_t buflen) kernfs_name() argument
89 ret = kernfs_name_locked(kn, buf, buflen); kernfs_name()
96 * @kn: kernfs_node of interest
97 * @buf: buffer to copy @kn's name into
100 * Builds and returns the full path of @kn in @buf of @buflen bytes. The
105 char *kernfs_path(struct kernfs_node *kn, char *buf, size_t buflen) kernfs_path() argument
111 p = kernfs_path_locked(kn, buf, buflen); kernfs_path()
119 * @kn: kernfs_node of interest
123 void pr_cont_kernfs_name(struct kernfs_node *kn) pr_cont_kernfs_name() argument
129 kernfs_name_locked(kn, kernfs_pr_cont_buf, sizeof(kernfs_pr_cont_buf)); pr_cont_kernfs_name()
137 * @kn: kernfs_node of interest
141 void pr_cont_kernfs_path(struct kernfs_node *kn) pr_cont_kernfs_path() argument
148 p = kernfs_path_locked(kn, kernfs_pr_cont_buf, pr_cont_kernfs_path()
160 * @kn: kernfs_node of interest
162 * Determines @kn's parent, pins and returns it. This function can be
165 struct kernfs_node *kernfs_get_parent(struct kernfs_node *kn) kernfs_get_parent() argument
171 parent = kn->parent; kernfs_get_parent()
202 const void *ns, const struct kernfs_node *kn) kernfs_name_compare()
204 if (hash < kn->hash) kernfs_name_compare()
206 if (hash > kn->hash) kernfs_name_compare()
208 if (ns < kn->ns) kernfs_name_compare()
210 if (ns > kn->ns) kernfs_name_compare()
212 return strcmp(name, kn->name); kernfs_name_compare()
223 * @kn: kernfs_node of interest
225 * Link @kn into its sibling rbtree which starts from
226 * @kn->parent->dir.children.
234 static int kernfs_link_sibling(struct kernfs_node *kn) kernfs_link_sibling() argument
236 struct rb_node **node = &kn->parent->dir.children.rb_node; kernfs_link_sibling()
245 result = kernfs_sd_compare(kn, pos); kernfs_link_sibling()
255 rb_link_node(&kn->rb, parent, node); kernfs_link_sibling()
256 rb_insert_color(&kn->rb, &kn->parent->dir.children); kernfs_link_sibling()
259 if (kernfs_type(kn) == KERNFS_DIR) kernfs_link_sibling()
260 kn->parent->dir.subdirs++; kernfs_link_sibling()
267 * @kn: kernfs_node of interest
269 * Try to unlink @kn from its sibling rbtree which starts from
270 * kn->parent->dir.children. Returns %true if @kn was actually
271 * removed, %false if @kn wasn't on the rbtree.
276 static bool kernfs_unlink_sibling(struct kernfs_node *kn) kernfs_unlink_sibling() argument
278 if (RB_EMPTY_NODE(&kn->rb)) kernfs_unlink_sibling()
281 if (kernfs_type(kn) == KERNFS_DIR) kernfs_unlink_sibling()
282 kn->parent->dir.subdirs--; kernfs_unlink_sibling()
284 rb_erase(&kn->rb, &kn->parent->dir.children); kernfs_unlink_sibling()
285 RB_CLEAR_NODE(&kn->rb); kernfs_unlink_sibling()
291 * @kn: kernfs_node to get an active reference to
293 * Get an active reference of @kn. This function is noop if @kn
297 * Pointer to @kn on success, NULL on failure.
299 struct kernfs_node *kernfs_get_active(struct kernfs_node *kn) kernfs_get_active() argument
301 if (unlikely(!kn)) kernfs_get_active()
304 if (!atomic_inc_unless_negative(&kn->active)) kernfs_get_active()
307 if (kernfs_lockdep(kn)) kernfs_get_active()
308 rwsem_acquire_read(&kn->dep_map, 0, 1, _RET_IP_); kernfs_get_active()
309 return kn; kernfs_get_active()
314 * @kn: kernfs_node to put an active reference to
316 * Put an active reference to @kn. This function is noop if @kn
319 void kernfs_put_active(struct kernfs_node *kn) kernfs_put_active() argument
321 struct kernfs_root *root = kernfs_root(kn); kernfs_put_active()
324 if (unlikely(!kn)) kernfs_put_active()
327 if (kernfs_lockdep(kn)) kernfs_put_active()
328 rwsem_release(&kn->dep_map, 1, _RET_IP_); kernfs_put_active()
329 v = atomic_dec_return(&kn->active); kernfs_put_active()
338 * @kn: kernfs_node to drain
340 * Drain existing usages and nuke all existing mmaps of @kn. Mutiple
341 * removers may invoke this function concurrently on @kn and all will
344 static void kernfs_drain(struct kernfs_node *kn)
347 struct kernfs_root *root = kernfs_root(kn);
350 WARN_ON_ONCE(kernfs_active(kn));
354 if (kernfs_lockdep(kn)) {
355 rwsem_acquire(&kn->dep_map, 0, 0, _RET_IP_);
356 if (atomic_read(&kn->active) != KN_DEACTIVATED_BIAS)
357 lock_contended(&kn->dep_map, _RET_IP_);
362 atomic_read(&kn->active) == KN_DEACTIVATED_BIAS);
364 if (kernfs_lockdep(kn)) {
365 lock_acquired(&kn->dep_map, _RET_IP_);
366 rwsem_release(&kn->dep_map, 1, _RET_IP_);
369 kernfs_unmap_bin_file(kn); variable
376 * @kn: the target kernfs_node
378 void kernfs_get(struct kernfs_node *kn) kernfs_get() argument
380 if (kn) { kernfs_get()
381 WARN_ON(!atomic_read(&kn->count)); kernfs_get()
382 atomic_inc(&kn->count); kernfs_get()
389 * @kn: the target kernfs_node
391 * Put a reference count of @kn and destroy it if it reached zero.
393 void kernfs_put(struct kernfs_node *kn) kernfs_put() argument
398 if (!kn || !atomic_dec_and_test(&kn->count)) kernfs_put()
400 root = kernfs_root(kn); kernfs_put()
404 * kn->parent won't change beneath us. kernfs_put()
406 parent = kn->parent; kernfs_put()
408 WARN_ONCE(atomic_read(&kn->active) != KN_DEACTIVATED_BIAS, kernfs_put()
410 parent ? parent->name : "", kn->name, atomic_read(&kn->active)); kernfs_put()
412 if (kernfs_type(kn) == KERNFS_LINK) kernfs_put()
413 kernfs_put(kn->symlink.target_kn); kernfs_put()
415 kfree_const(kn->name); kernfs_put()
417 if (kn->iattr) { kernfs_put()
418 if (kn->iattr->ia_secdata) kernfs_put()
419 security_release_secctx(kn->iattr->ia_secdata, kernfs_put()
420 kn->iattr->ia_secdata_len); kernfs_put()
421 simple_xattrs_free(&kn->iattr->xattrs); kernfs_put()
423 kfree(kn->iattr); kernfs_put()
424 ida_simple_remove(&root->ino_ida, kn->ino); kernfs_put()
425 kmem_cache_free(kernfs_node_cache, kn); kernfs_put()
427 kn = parent; kernfs_put()
428 if (kn) { kernfs_put()
429 if (atomic_dec_and_test(&kn->count)) kernfs_put()
432 /* just released the root kn, free @root too */ kernfs_put()
441 struct kernfs_node *kn; kernfs_dop_revalidate() local
450 kn = dentry->d_fsdata; kernfs_dop_revalidate()
454 if (!kernfs_active(kn)) kernfs_dop_revalidate()
458 if (dentry->d_parent->d_fsdata != kn->parent) kernfs_dop_revalidate()
462 if (strcmp(dentry->d_name.name, kn->name) != 0) kernfs_dop_revalidate()
466 if (kn->parent && kernfs_ns_enabled(kn->parent) && kernfs_dop_revalidate()
467 kernfs_info(dentry->d_sb)->ns != kn->ns) kernfs_dop_revalidate()
510 struct kernfs_node *kn; __kernfs_new_node() local
517 kn = kmem_cache_zalloc(kernfs_node_cache, GFP_KERNEL); __kernfs_new_node()
518 if (!kn) __kernfs_new_node()
531 kn->ino = ret; __kernfs_new_node()
533 atomic_set(&kn->count, 1); __kernfs_new_node()
534 atomic_set(&kn->active, KN_DEACTIVATED_BIAS); __kernfs_new_node()
535 RB_CLEAR_NODE(&kn->rb); __kernfs_new_node()
537 kn->name = name; __kernfs_new_node()
538 kn->mode = mode; __kernfs_new_node()
539 kn->flags = flags; __kernfs_new_node()
541 return kn; __kernfs_new_node()
544 kmem_cache_free(kernfs_node_cache, kn); __kernfs_new_node()
554 struct kernfs_node *kn; kernfs_new_node() local
556 kn = __kernfs_new_node(kernfs_root(parent), name, mode, flags); kernfs_new_node()
557 if (kn) { kernfs_new_node()
559 kn->parent = parent; kernfs_new_node()
561 return kn; kernfs_new_node()
566 * @kn: kernfs_node to be added
568 * The caller must already have initialized @kn->parent. This
569 * function increments nlink of the parent's inode if @kn is a
576 int kernfs_add_one(struct kernfs_node *kn) kernfs_add_one() argument
578 struct kernfs_node *parent = kn->parent; kernfs_add_one()
587 if (WARN(has_ns != (bool)kn->ns, KERN_WARNING "kernfs: ns %s in '%s' for '%s'\n", kernfs_add_one()
588 has_ns ? "required" : "invalid", parent->name, kn->name)) kernfs_add_one()
601 kn->hash = kernfs_name_hash(kn->name, kn->ns); kernfs_add_one()
603 ret = kernfs_link_sibling(kn); kernfs_add_one()
623 if (!(kernfs_root(kn)->flags & KERNFS_ROOT_CREATE_DEACTIVATED)) kernfs_add_one()
624 kernfs_activate(kn); kernfs_add_one()
659 struct kernfs_node *kn; kernfs_find_ns() local
662 kn = rb_to_kn(node); kernfs_find_ns()
663 result = kernfs_name_compare(hash, name, ns, kn); kernfs_find_ns()
669 return kn; kernfs_find_ns()
687 struct kernfs_node *kn; kernfs_find_and_get_ns() local
690 kn = kernfs_find_ns(parent, name, ns); kernfs_find_and_get_ns()
691 kernfs_get(kn); kernfs_find_and_get_ns()
694 return kn; kernfs_find_and_get_ns()
711 struct kernfs_node *kn; kernfs_create_root() local
720 kn = __kernfs_new_node(root, "", S_IFDIR | S_IRUGO | S_IXUGO, kernfs_create_root()
722 if (!kn) { kernfs_create_root()
728 kn->priv = priv; kernfs_create_root()
729 kn->dir.root = root; kernfs_create_root()
733 root->kn = kn; kernfs_create_root()
737 kernfs_activate(kn); kernfs_create_root()
751 kernfs_remove(root->kn); /* will also free @root */ kernfs_destroy_root()
768 struct kernfs_node *kn; kernfs_create_dir_ns() local
772 kn = kernfs_new_node(parent, name, mode | S_IFDIR, KERNFS_DIR); kernfs_create_dir_ns()
773 if (!kn) kernfs_create_dir_ns()
776 kn->dir.root = parent->dir.root; kernfs_create_dir_ns()
777 kn->ns = ns; kernfs_create_dir_ns()
778 kn->priv = priv; kernfs_create_dir_ns()
781 rc = kernfs_add_one(kn); kernfs_create_dir_ns()
783 return kn; kernfs_create_dir_ns()
785 kernfs_put(kn); kernfs_create_dir_ns()
799 struct kernfs_node *kn; kernfs_create_empty_dir() local
803 kn = kernfs_new_node(parent, name, S_IRUGO|S_IXUGO|S_IFDIR, KERNFS_DIR); kernfs_create_empty_dir()
804 if (!kn) kernfs_create_empty_dir()
807 kn->flags |= KERNFS_EMPTY_DIR; kernfs_create_empty_dir()
808 kn->dir.root = parent->dir.root; kernfs_create_empty_dir()
809 kn->ns = NULL; kernfs_create_empty_dir()
810 kn->priv = NULL; kernfs_create_empty_dir()
813 rc = kernfs_add_one(kn); kernfs_create_empty_dir()
815 return kn; kernfs_create_empty_dir()
817 kernfs_put(kn); kernfs_create_empty_dir()
827 struct kernfs_node *kn; kernfs_iop_lookup() local
836 kn = kernfs_find_ns(parent, dentry->d_name.name, ns); kernfs_iop_lookup()
839 if (!kn || !kernfs_active(kn)) { kernfs_iop_lookup()
843 kernfs_get(kn); kernfs_iop_lookup()
844 dentry->d_fsdata = kn; kernfs_iop_lookup()
847 inode = kernfs_get_inode(dir->i_sb, kn); kernfs_iop_lookup()
881 struct kernfs_node *kn = dentry->d_fsdata; kernfs_iop_rmdir() local
882 struct kernfs_syscall_ops *scops = kernfs_root(kn)->syscall_ops; kernfs_iop_rmdir()
888 if (!kernfs_get_active(kn)) kernfs_iop_rmdir()
891 ret = scops->rmdir(kn); kernfs_iop_rmdir()
893 kernfs_put_active(kn); kernfs_iop_rmdir()
900 struct kernfs_node *kn = old_dentry->d_fsdata; kernfs_iop_rename() local
902 struct kernfs_syscall_ops *scops = kernfs_root(kn)->syscall_ops; kernfs_iop_rename()
908 if (!kernfs_get_active(kn)) kernfs_iop_rename()
912 kernfs_put_active(kn); kernfs_iop_rename()
916 ret = scops->rename(kn, new_parent, new_dentry->d_name.name); kernfs_iop_rename()
919 kernfs_put_active(kn); kernfs_iop_rename()
995 * @kn: kernfs_node whose subtree is to be activated
1004 * after kernfs_remove*() is invoked on @kn.
1006 void kernfs_activate(struct kernfs_node *kn) kernfs_activate() argument
1013 while ((pos = kernfs_next_descendant_post(pos, kn))) { kernfs_activate()
1027 static void __kernfs_remove(struct kernfs_node *kn) __kernfs_remove() argument
1034 * Short-circuit if non-root @kn has already finished removal. __kernfs_remove()
1038 if (!kn || (kn->parent && RB_EMPTY_NODE(&kn->rb))) __kernfs_remove()
1041 pr_debug("kernfs %s: removing\n", kn->name); __kernfs_remove()
1043 /* prevent any new usage under @kn by deactivating all nodes */ __kernfs_remove()
1045 while ((pos = kernfs_next_descendant_post(pos, kn))) __kernfs_remove()
1051 pos = kernfs_leftmost_descendant(kn); __kernfs_remove()
1062 * Drain iff @kn was activated. This avoids draining and __kernfs_remove()
1067 if (kn->flags & KERNFS_ACTIVATED) __kernfs_remove()
1070 WARN_ON_ONCE(atomic_read(&kn->active) != KN_DEACTIVATED_BIAS); __kernfs_remove()
1090 } while (pos != kn); __kernfs_remove()
1095 * @kn: the kernfs_node to remove
1097 * Remove @kn along with all its subdirectories and files.
1099 void kernfs_remove(struct kernfs_node *kn) kernfs_remove() argument
1102 __kernfs_remove(kn); kernfs_remove()
1108 * @kn: the self kernfs_node
1115 * This function releases the active reference of @kn the caller is
1116 * holding. Once this function is called, @kn may be removed at any point
1120 void kernfs_break_active_protection(struct kernfs_node *kn) kernfs_break_active_protection() argument
1126 kernfs_put_active(kn); kernfs_break_active_protection()
1131 * @kn: the self kernfs_node
1136 * restore the active protection - @kn may already or be in the process of
1144 void kernfs_unbreak_active_protection(struct kernfs_node *kn) kernfs_unbreak_active_protection() argument
1147 * @kn->active could be in any state; however, the increment we do kernfs_unbreak_active_protection()
1149 * finishes and this temporary bump can't break anything. If @kn kernfs_unbreak_active_protection()
1150 * is alive, nothing changes. If @kn is being deactivated, the kernfs_unbreak_active_protection()
1152 * deactivated state. If @kn is already removed, the temporary kernfs_unbreak_active_protection()
1153 * bump is guaranteed to be gone before @kn is released. kernfs_unbreak_active_protection()
1155 atomic_inc(&kn->active); kernfs_unbreak_active_protection()
1156 if (kernfs_lockdep(kn)) kernfs_unbreak_active_protection()
1157 rwsem_acquire(&kn->dep_map, 0, 1, _RET_IP_); kernfs_unbreak_active_protection()
1162 * @kn: the self kernfs_node to remove
1186 bool kernfs_remove_self(struct kernfs_node *kn) kernfs_remove_self() argument
1191 kernfs_break_active_protection(kn); kernfs_remove_self()
1202 if (!(kn->flags & KERNFS_SUICIDAL)) { kernfs_remove_self()
1203 kn->flags |= KERNFS_SUICIDAL; kernfs_remove_self()
1204 __kernfs_remove(kn); kernfs_remove_self()
1205 kn->flags |= KERNFS_SUICIDED; kernfs_remove_self()
1208 wait_queue_head_t *waitq = &kernfs_root(kn)->deactivate_waitq; kernfs_remove_self()
1214 if ((kn->flags & KERNFS_SUICIDED) && kernfs_remove_self()
1215 atomic_read(&kn->active) == KN_DEACTIVATED_BIAS) kernfs_remove_self()
1223 WARN_ON_ONCE(!RB_EMPTY_NODE(&kn->rb)); kernfs_remove_self()
1231 kernfs_unbreak_active_protection(kn); kernfs_remove_self()
1249 struct kernfs_node *kn; kernfs_remove_by_name_ns() local
1259 kn = kernfs_find_ns(parent, name, ns); kernfs_remove_by_name_ns()
1260 if (kn) kernfs_remove_by_name_ns()
1261 __kernfs_remove(kn); kernfs_remove_by_name_ns()
1265 if (kn) kernfs_remove_by_name_ns()
1273 * @kn: target node
1278 int kernfs_rename_ns(struct kernfs_node *kn, struct kernfs_node *new_parent, kernfs_rename_ns() argument
1286 if (!kn->parent) kernfs_rename_ns()
1292 if (!kernfs_active(kn) || !kernfs_active(new_parent) || kernfs_rename_ns()
1297 if ((kn->parent == new_parent) && (kn->ns == new_ns) && kernfs_rename_ns()
1298 (strcmp(kn->name, new_name) == 0)) kernfs_rename_ns()
1306 if (strcmp(kn->name, new_name) != 0) { kernfs_rename_ns()
1318 kernfs_unlink_sibling(kn); kernfs_rename_ns()
1324 old_parent = kn->parent; kernfs_rename_ns()
1325 kn->parent = new_parent; kernfs_rename_ns()
1327 kn->ns = new_ns; kernfs_rename_ns()
1329 old_name = kn->name; kernfs_rename_ns()
1330 kn->name = new_name; kernfs_rename_ns()
1335 kn->hash = kernfs_name_hash(kn->name, kn->ns); kernfs_rename_ns()
1336 kernfs_link_sibling(kn); kernfs_rename_ns()
1348 static inline unsigned char dt_type(struct kernfs_node *kn) dt_type() argument
1350 return (kn->mode >> 12) & 15; dt_type()
201 kernfs_name_compare(unsigned int hash, const char *name, const void *ns, const struct kernfs_node *kn) kernfs_name_compare() argument
H A Dinode.c37 static struct kernfs_iattrs *kernfs_iattrs(struct kernfs_node *kn) kernfs_iattrs() argument
45 if (kn->iattr) kernfs_iattrs()
48 kn->iattr = kzalloc(sizeof(struct kernfs_iattrs), GFP_KERNEL); kernfs_iattrs()
49 if (!kn->iattr) kernfs_iattrs()
51 iattrs = &kn->iattr->ia_iattr; kernfs_iattrs()
54 iattrs->ia_mode = kn->mode; kernfs_iattrs()
59 simple_xattrs_init(&kn->iattr->xattrs); kernfs_iattrs()
61 ret = kn->iattr; kernfs_iattrs()
66 static int __kernfs_setattr(struct kernfs_node *kn, const struct iattr *iattr) __kernfs_setattr() argument
72 attrs = kernfs_iattrs(kn); __kernfs_setattr()
90 iattrs->ia_mode = kn->mode = mode; __kernfs_setattr()
97 * @kn: target node
102 int kernfs_setattr(struct kernfs_node *kn, const struct iattr *iattr) kernfs_setattr() argument
107 ret = __kernfs_setattr(kn, iattr); kernfs_setattr()
115 struct kernfs_node *kn = dentry->d_fsdata; kernfs_iop_setattr() local
118 if (!kn) kernfs_iop_setattr()
126 error = __kernfs_setattr(kn, iattr); kernfs_iop_setattr()
138 static int kernfs_node_setsecdata(struct kernfs_node *kn, void **secdata, kernfs_node_setsecdata() argument
145 attrs = kernfs_iattrs(kn); kernfs_node_setsecdata()
163 struct kernfs_node *kn = dentry->d_fsdata; kernfs_iop_setxattr() local
169 attrs = kernfs_iattrs(kn); kernfs_iop_setxattr()
185 error = kernfs_node_setsecdata(kn, &secdata, &secdata_len); kernfs_iop_setxattr()
201 struct kernfs_node *kn = dentry->d_fsdata; kernfs_iop_removexattr() local
204 attrs = kernfs_iattrs(kn); kernfs_iop_removexattr()
214 struct kernfs_node *kn = dentry->d_fsdata; kernfs_iop_getxattr() local
217 attrs = kernfs_iattrs(kn); kernfs_iop_getxattr()
226 struct kernfs_node *kn = dentry->d_fsdata; kernfs_iop_listxattr() local
229 attrs = kernfs_iattrs(kn); kernfs_iop_listxattr()
251 static void kernfs_refresh_inode(struct kernfs_node *kn, struct inode *inode) kernfs_refresh_inode() argument
253 struct kernfs_iattrs *attrs = kn->iattr; kernfs_refresh_inode()
255 inode->i_mode = kn->mode; kernfs_refresh_inode()
266 if (kernfs_type(kn) == KERNFS_DIR) kernfs_refresh_inode()
267 set_nlink(inode, kn->dir.subdirs + 2); kernfs_refresh_inode()
273 struct kernfs_node *kn = dentry->d_fsdata; kernfs_iop_getattr() local
277 kernfs_refresh_inode(kn, inode); kernfs_iop_getattr()
284 static void kernfs_init_inode(struct kernfs_node *kn, struct inode *inode) kernfs_init_inode() argument
286 kernfs_get(kn); kernfs_init_inode()
287 inode->i_private = kn; kernfs_init_inode()
291 set_default_inode_attr(inode, kn->mode); kernfs_init_inode()
292 kernfs_refresh_inode(kn, inode); kernfs_init_inode()
295 switch (kernfs_type(kn)) { kernfs_init_inode()
299 if (kn->flags & KERNFS_EMPTY_DIR) kernfs_init_inode()
303 inode->i_size = kn->attr.size; kernfs_init_inode()
319 * @kn: kernfs_node to allocate inode for
321 * Get inode for @kn. If such inode doesn't exist, a new inode is
331 struct inode *kernfs_get_inode(struct super_block *sb, struct kernfs_node *kn) kernfs_get_inode() argument
335 inode = iget_locked(sb, kn->ino); kernfs_get_inode()
337 kernfs_init_inode(kn, inode); kernfs_get_inode()
351 struct kernfs_node *kn = inode->i_private; kernfs_evict_inode() local
355 kernfs_put(kn); kernfs_evict_inode()
360 struct kernfs_node *kn; kernfs_iop_permission() local
365 kn = inode->i_private; kernfs_iop_permission()
368 kernfs_refresh_inode(kn, inode); kernfs_iop_permission()
H A Dkernfs-internal.h36 * @kn: kernfs_node of interest
38 * Return the kernfs_root @kn belongs to.
40 static inline struct kernfs_root *kernfs_root(struct kernfs_node *kn) kernfs_root() argument
43 if (kn->parent) kernfs_root()
44 kn = kn->parent; kernfs_root()
45 return kn->dir.root; kernfs_root()
79 struct inode *kernfs_get_inode(struct super_block *sb, struct kernfs_node *kn);
100 struct kernfs_node *kernfs_get_active(struct kernfs_node *kn);
101 void kernfs_put_active(struct kernfs_node *kn);
102 int kernfs_add_one(struct kernfs_node *kn);
112 void kernfs_unmap_bin_file(struct kernfs_node *kn);
H A Dfile.c64 static const struct kernfs_ops *kernfs_ops(struct kernfs_node *kn) kernfs_ops() argument
66 if (kn->flags & KERNFS_LOCKDEP) kernfs_ops()
67 lockdep_assert_held(kn); kernfs_ops()
68 return kn->attr.ops; kernfs_ops()
96 const struct kernfs_ops *ops = kernfs_ops(of->kn); kernfs_seq_stop_active()
100 kernfs_put_active(of->kn); kernfs_seq_stop_active()
113 if (!kernfs_get_active(of->kn)) kernfs_seq_start()
116 ops = kernfs_ops(of->kn); kernfs_seq_start()
135 const struct kernfs_ops *ops = kernfs_ops(of->kn); kernfs_seq_next()
166 of->event = atomic_read(&of->kn->attr.open->event); kernfs_seq_show()
168 return of->kn->attr.ops->seq_show(sf, v); kernfs_seq_show()
204 if (!kernfs_get_active(of->kn)) { kernfs_file_direct_read()
210 of->event = atomic_read(&of->kn->attr.open->event); kernfs_file_direct_read()
211 ops = kernfs_ops(of->kn); kernfs_file_direct_read()
228 kernfs_put_active(of->kn); kernfs_file_direct_read()
248 if (of->kn->flags & KERNFS_HAS_SEQ_SHOW) kernfs_fop_read()
298 if (!kernfs_get_active(of->kn)) { kernfs_fop_write()
310 ops = kernfs_ops(of->kn); kernfs_fop_write()
320 kernfs_put_active(of->kn); kernfs_fop_write()
336 if (!kernfs_get_active(of->kn)) kernfs_vma_open()
342 kernfs_put_active(of->kn); kernfs_vma_open()
354 if (!kernfs_get_active(of->kn)) kernfs_vma_fault()
361 kernfs_put_active(of->kn); kernfs_vma_fault()
375 if (!kernfs_get_active(of->kn)) kernfs_vma_page_mkwrite()
384 kernfs_put_active(of->kn); kernfs_vma_page_mkwrite()
398 if (!kernfs_get_active(of->kn)) kernfs_vma_access()
405 kernfs_put_active(of->kn); kernfs_vma_access()
420 if (!kernfs_get_active(of->kn)) kernfs_vma_set_policy()
427 kernfs_put_active(of->kn); kernfs_vma_set_policy()
441 if (!kernfs_get_active(of->kn)) kernfs_vma_get_policy()
448 kernfs_put_active(of->kn); kernfs_vma_get_policy()
478 if (!(of->kn->flags & KERNFS_HAS_MMAP)) kernfs_fop_mmap()
484 if (!kernfs_get_active(of->kn)) kernfs_fop_mmap()
487 ops = kernfs_ops(of->kn); kernfs_fop_mmap()
517 kernfs_put_active(of->kn); kernfs_fop_mmap()
526 * @kn: target kernfs_node
529 * If @kn->attr.open exists, increment its reference count; otherwise,
538 static int kernfs_get_open_node(struct kernfs_node *kn, kernfs_get_open_node() argument
547 if (!kn->attr.open && new_on) { kernfs_get_open_node()
548 kn->attr.open = new_on; kernfs_get_open_node()
552 on = kn->attr.open; kernfs_get_open_node()
580 * @kn: target kernfs_nodet
583 * Put @kn->attr.open and unlink @of from the files list. If
589 static void kernfs_put_open_node(struct kernfs_node *kn, kernfs_put_open_node() argument
592 struct kernfs_open_node *on = kn->attr.open; kernfs_put_open_node()
602 kn->attr.open = NULL; kernfs_put_open_node()
614 struct kernfs_node *kn = file->f_path.dentry->d_fsdata; kernfs_fop_open() local
615 struct kernfs_root *root = kernfs_root(kn); kernfs_fop_open()
621 if (!kernfs_get_active(kn)) kernfs_fop_open()
624 ops = kernfs_ops(kn); kernfs_fop_open()
667 of->kn = kn; kernfs_fop_open()
711 error = kernfs_get_open_node(kn, of); kernfs_fop_open()
716 kernfs_put_active(kn); kernfs_fop_open()
725 kernfs_put_active(kn); kernfs_fop_open()
731 struct kernfs_node *kn = filp->f_path.dentry->d_fsdata; kernfs_fop_release() local
734 kernfs_put_open_node(kn, of); kernfs_fop_release()
742 void kernfs_unmap_bin_file(struct kernfs_node *kn) kernfs_unmap_bin_file() argument
747 if (!(kn->flags & KERNFS_HAS_MMAP)) kernfs_unmap_bin_file()
751 on = kn->attr.open; kernfs_unmap_bin_file()
765 kernfs_put_open_node(kn, NULL); kernfs_unmap_bin_file()
785 struct kernfs_node *kn = filp->f_path.dentry->d_fsdata; kernfs_fop_poll() local
786 struct kernfs_open_node *on = kn->attr.open; kernfs_fop_poll()
789 if (!kernfs_get_active(kn)) kernfs_fop_poll()
794 kernfs_put_active(kn); kernfs_fop_poll()
807 struct kernfs_node *kn; kernfs_notify_workfn() local
813 kn = kernfs_notify_list; kernfs_notify_workfn()
814 if (kn == KERNFS_NOTIFY_EOL) { kernfs_notify_workfn()
818 kernfs_notify_list = kn->attr.notify_next; kernfs_notify_workfn()
819 kn->attr.notify_next = NULL; kernfs_notify_workfn()
825 on = kn->attr.open; kernfs_notify_workfn()
836 list_for_each_entry(info, &kernfs_root(kn)->supers, node) { kernfs_notify_workfn()
840 inode = ilookup(info->sb, kn->ino); kernfs_notify_workfn()
856 kernfs_put(kn); kernfs_notify_workfn()
862 * @kn: file to notify
864 * Notify @kn such that poll(2) on @kn wakes up. Maybe be called from any
867 void kernfs_notify(struct kernfs_node *kn) kernfs_notify() argument
872 if (WARN_ON(kernfs_type(kn) != KERNFS_FILE)) kernfs_notify()
876 if (!kn->attr.notify_next) { kernfs_notify()
877 kernfs_get(kn); kernfs_notify()
878 kn->attr.notify_next = kernfs_notify_list; kernfs_notify()
879 kernfs_notify_list = kn; kernfs_notify()
916 struct kernfs_node *kn; __kernfs_create_file() local
922 kn = kernfs_new_node(parent, name, (mode & S_IALLUGO) | S_IFREG, flags); __kernfs_create_file()
923 if (!kn) __kernfs_create_file()
926 kn->attr.ops = ops; __kernfs_create_file()
927 kn->attr.size = size; __kernfs_create_file()
928 kn->ns = ns; __kernfs_create_file()
929 kn->priv = priv; __kernfs_create_file()
933 lockdep_init_map(&kn->dep_map, "s_active", key, 0); __kernfs_create_file()
934 kn->flags |= KERNFS_LOCKDEP; __kernfs_create_file()
939 * kn->attr.ops is accesible only while holding active ref. We __kernfs_create_file()
944 kn->flags |= KERNFS_HAS_SEQ_SHOW; __kernfs_create_file()
946 kn->flags |= KERNFS_HAS_MMAP; __kernfs_create_file()
948 rc = kernfs_add_one(kn); __kernfs_create_file()
950 kernfs_put(kn); __kernfs_create_file()
953 return kn; __kernfs_create_file()
H A Dmount.c80 inode = kernfs_get_inode(sb, info->root->kn); kernfs_fill_super()
93 kernfs_get(info->root->kn); kernfs_fill_super()
94 root->d_fsdata = info->root->kn; kernfs_fill_super()
/linux-4.1.27/include/linux/
H A Dkernfs.h76 /* children rbtree starts here and goes through kn->rb */
152 int (*rmdir)(struct kernfs_node *kn);
153 int (*rename)(struct kernfs_node *kn, struct kernfs_node *new_parent,
159 struct kernfs_node *kn; member in struct:kernfs_root
174 struct kernfs_node *kn; member in struct:kernfs_open_file
237 static inline enum kernfs_node_type kernfs_type(struct kernfs_node *kn) kernfs_type() argument
239 return kn->flags & KERNFS_TYPE_MASK; kernfs_type()
244 * @kn: directory of interest, should be empty
246 * This is to be called right after @kn is created to enable namespace
247 * under it. All children of @kn must have non-NULL namespace tags and
250 static inline void kernfs_enable_ns(struct kernfs_node *kn) kernfs_enable_ns() argument
252 WARN_ON_ONCE(kernfs_type(kn) != KERNFS_DIR); kernfs_enable_ns()
253 WARN_ON_ONCE(!RB_EMPTY_ROOT(&kn->dir.children)); kernfs_enable_ns()
254 kn->flags |= KERNFS_NS; kernfs_enable_ns()
259 * @kn: the node to test
263 static inline bool kernfs_ns_enabled(struct kernfs_node *kn) kernfs_ns_enabled() argument
265 return kn->flags & KERNFS_NS; kernfs_ns_enabled()
268 int kernfs_name(struct kernfs_node *kn, char *buf, size_t buflen);
269 char * __must_check kernfs_path(struct kernfs_node *kn, char *buf,
271 void pr_cont_kernfs_name(struct kernfs_node *kn);
272 void pr_cont_kernfs_path(struct kernfs_node *kn);
273 struct kernfs_node *kernfs_get_parent(struct kernfs_node *kn);
276 void kernfs_get(struct kernfs_node *kn);
277 void kernfs_put(struct kernfs_node *kn);
300 void kernfs_activate(struct kernfs_node *kn);
301 void kernfs_remove(struct kernfs_node *kn);
302 void kernfs_break_active_protection(struct kernfs_node *kn);
303 void kernfs_unbreak_active_protection(struct kernfs_node *kn);
304 bool kernfs_remove_self(struct kernfs_node *kn);
307 int kernfs_rename_ns(struct kernfs_node *kn, struct kernfs_node *new_parent,
309 int kernfs_setattr(struct kernfs_node *kn, const struct iattr *iattr);
310 void kernfs_notify(struct kernfs_node *kn);
323 static inline enum kernfs_node_type kernfs_type(struct kernfs_node *kn) kernfs_type() argument
326 static inline void kernfs_enable_ns(struct kernfs_node *kn) { } kernfs_enable_ns() argument
328 static inline bool kernfs_ns_enabled(struct kernfs_node *kn) kernfs_ns_enabled() argument
331 static inline int kernfs_name(struct kernfs_node *kn, char *buf, size_t buflen) kernfs_name() argument
334 static inline char * __must_check kernfs_path(struct kernfs_node *kn, char *buf, kernfs_path() argument
338 static inline void pr_cont_kernfs_name(struct kernfs_node *kn) { } pr_cont_kernfs_path() argument
339 static inline void pr_cont_kernfs_path(struct kernfs_node *kn) { } pr_cont_kernfs_path() argument
341 static inline struct kernfs_node *kernfs_get_parent(struct kernfs_node *kn) kernfs_get_parent() argument
349 static inline void kernfs_get(struct kernfs_node *kn) { } kernfs_put() argument
350 static inline void kernfs_put(struct kernfs_node *kn) { } kernfs_put() argument
381 static inline void kernfs_activate(struct kernfs_node *kn) { } kernfs_activate() argument
383 static inline void kernfs_remove(struct kernfs_node *kn) { } kernfs_remove() argument
385 static inline bool kernfs_remove_self(struct kernfs_node *kn) kernfs_remove_self() argument
388 static inline int kernfs_remove_by_name_ns(struct kernfs_node *kn, kernfs_remove_by_name_ns() argument
392 static inline int kernfs_rename_ns(struct kernfs_node *kn, kernfs_rename_ns() argument
397 static inline int kernfs_setattr(struct kernfs_node *kn, kernfs_setattr() argument
401 static inline void kernfs_notify(struct kernfs_node *kn) { } kernfs_notify() argument
419 kernfs_find_and_get(struct kernfs_node *kn, const char *name) kernfs_find_and_get() argument
421 return kernfs_find_and_get_ns(kn, name, NULL); kernfs_find_and_get()
458 static inline int kernfs_rename(struct kernfs_node *kn, kernfs_rename() argument
462 return kernfs_rename_ns(kn, new_parent, new_name, NULL); kernfs_rename()
H A Dsysfs.h276 static inline void sysfs_enable_ns(struct kernfs_node *kn) sysfs_enable_ns() argument
278 return kernfs_enable_ns(kn); sysfs_enable_ns()
464 static inline void sysfs_enable_ns(struct kernfs_node *kn) sysfs_enable_ns() argument
488 static inline void sysfs_notify_dirent(struct kernfs_node *kn) sysfs_notify_dirent() argument
490 kernfs_notify(kn); sysfs_notify_dirent()
499 static inline struct kernfs_node *sysfs_get(struct kernfs_node *kn) sysfs_get() argument
501 kernfs_get(kn); sysfs_get()
502 return kn; sysfs_get()
505 static inline void sysfs_put(struct kernfs_node *kn) sysfs_put() argument
507 kernfs_put(kn); sysfs_put()
H A Dcgroup.h191 return cgrp->kn->ino; cgroup_ino()
197 return of->kn->priv; of_cft()
220 return kernfs_name(cgrp->kn, buf, buflen); cgroup_name()
226 return kernfs_path(cgrp->kn, buf, buflen); cgroup_path()
231 pr_cont_kernfs_name(cgrp->kn); pr_cont_cgroup_name()
236 pr_cont_kernfs_path(cgrp->kn); pr_cont_cgroup_path()
H A Dcgroup-defs.h226 struct kernfs_node *kn; /* cgroup kernfs entry */ member in struct:cgroup
227 struct kernfs_node *populated_kn; /* kn for "cgroup.subtree_populated" */
/linux-4.1.27/fs/sysfs/
H A Ddir.c43 struct kernfs_node *parent, *kn; sysfs_create_dir_ns() local
55 kn = kernfs_create_dir_ns(parent, kobject_name(kobj), sysfs_create_dir_ns()
57 if (IS_ERR(kn)) { sysfs_create_dir_ns()
58 if (PTR_ERR(kn) == -EEXIST) sysfs_create_dir_ns()
60 return PTR_ERR(kn); sysfs_create_dir_ns()
63 kobj->sd = kn; sysfs_create_dir_ns()
77 struct kernfs_node *kn = kobj->sd; sysfs_remove_dir() local
95 if (kn) { sysfs_remove_dir()
96 WARN_ON_ONCE(kernfs_type(kn) != KERNFS_DIR); sysfs_remove_dir()
97 kernfs_remove(kn); sysfs_remove_dir()
116 struct kernfs_node *kn = kobj->sd; sysfs_move_dir_ns() local
122 return kernfs_rename_ns(kn, new_parent, kn->name, new_ns); sysfs_move_dir_ns()
132 struct kernfs_node *kn, *parent = parent_kobj->sd; sysfs_create_mount_point() local
134 kn = kernfs_create_empty_dir(parent, name); sysfs_create_mount_point()
135 if (IS_ERR(kn)) { sysfs_create_mount_point()
136 if (PTR_ERR(kn) == -EEXIST) sysfs_create_mount_point()
138 return PTR_ERR(kn); sysfs_create_mount_point()
H A Dfile.c28 static const struct sysfs_ops *sysfs_file_ops(struct kernfs_node *kn) sysfs_file_ops() argument
30 struct kobject *kobj = kn->parent->priv; sysfs_file_ops()
32 if (kn->flags & KERNFS_LOCKDEP) sysfs_file_ops()
33 lockdep_assert_held(kn); sysfs_file_ops()
45 struct kobject *kobj = of->kn->parent->priv; sysfs_kf_seq_show()
46 const struct sysfs_ops *ops = sysfs_file_ops(of->kn); sysfs_kf_seq_show()
63 count = ops->show(kobj, of->kn->priv, buf); sysfs_kf_seq_show()
85 struct bin_attribute *battr = of->kn->priv; sysfs_kf_bin_read()
86 struct kobject *kobj = of->kn->parent->priv; sysfs_kf_bin_read()
109 const struct sysfs_ops *ops = sysfs_file_ops(of->kn); sysfs_kf_read()
110 struct kobject *kobj = of->kn->parent->priv; sysfs_kf_read()
118 return ops->show(kobj, of->kn->priv, buf); sysfs_kf_read()
125 const struct sysfs_ops *ops = sysfs_file_ops(of->kn); sysfs_kf_write()
126 struct kobject *kobj = of->kn->parent->priv; sysfs_kf_write()
131 return ops->store(kobj, of->kn->priv, buf, count); sysfs_kf_write()
138 struct bin_attribute *battr = of->kn->priv; sysfs_kf_bin_write()
139 struct kobject *kobj = of->kn->parent->priv; sysfs_kf_bin_write()
159 struct bin_attribute *battr = of->kn->priv; sysfs_kf_bin_mmap()
160 struct kobject *kobj = of->kn->parent->priv; sysfs_kf_bin_mmap()
167 struct kernfs_node *kn = kobj->sd, *tmp; sysfs_notify() local
169 if (kn && dir) sysfs_notify()
170 kn = kernfs_find_and_get(kn, dir); sysfs_notify()
172 kernfs_get(kn); sysfs_notify()
174 if (kn && attr) { sysfs_notify()
175 tmp = kernfs_find_and_get(kn, attr); sysfs_notify()
176 kernfs_put(kn); sysfs_notify()
177 kn = tmp; sysfs_notify()
180 if (kn) { sysfs_notify()
181 kernfs_notify(kn); sysfs_notify()
182 kernfs_put(kn); sysfs_notify()
244 struct kernfs_node *kn; sysfs_add_file_mode_ns() local
297 kn = __kernfs_create_file(parent, attr->name, mode & 0777, size, ops, sysfs_add_file_mode_ns()
299 if (IS_ERR(kn)) { sysfs_add_file_mode_ns()
300 if (PTR_ERR(kn) == -EEXIST) sysfs_add_file_mode_ns()
302 return PTR_ERR(kn); sysfs_add_file_mode_ns()
382 struct kernfs_node *kn; sysfs_chmod_file() local
386 kn = kernfs_find_and_get(kobj->sd, attr->name); sysfs_chmod_file()
387 if (!kn) sysfs_chmod_file()
390 newattrs.ia_mode = (mode & S_IALLUGO) | (kn->mode & ~S_IALLUGO); sysfs_chmod_file()
393 rc = kernfs_setattr(kn, &newattrs); sysfs_chmod_file()
395 kernfs_put(kn); sysfs_chmod_file()
427 struct kernfs_node *kn; sysfs_remove_file_self() local
430 kn = kernfs_find_and_get(parent, attr->name); sysfs_remove_file_self()
431 if (WARN_ON_ONCE(!kn)) sysfs_remove_file_self()
434 ret = kernfs_remove_self(kn); sysfs_remove_file_self()
436 kernfs_put(kn); sysfs_remove_file_self()
H A Dsymlink.c25 struct kernfs_node *kn, *target = NULL; sysfs_do_create_link_sd() local
44 kn = kernfs_create_link(parent, name, target); sysfs_do_create_link_sd()
47 if (!IS_ERR(kn)) sysfs_do_create_link_sd()
50 if (warn && PTR_ERR(kn) == -EEXIST) sysfs_do_create_link_sd()
52 return PTR_ERR(kn); sysfs_do_create_link_sd()
57 * @kn: directory we're creating the link in.
61 int sysfs_create_link_sd(struct kernfs_node *kn, struct kobject *target, sysfs_create_link_sd() argument
64 return sysfs_do_create_link_sd(kn, target, name, 1); sysfs_create_link_sd()
168 struct kernfs_node *parent, *kn = NULL; sysfs_rename_link_ns() local
181 kn = kernfs_find_and_get_ns(parent, old, old_ns); sysfs_rename_link_ns()
182 if (!kn) sysfs_rename_link_ns()
186 if (kernfs_type(kn) != KERNFS_LINK) sysfs_rename_link_ns()
188 if (kn->symlink.target_kn->priv != targ) sysfs_rename_link_ns()
191 result = kernfs_rename_ns(kn, parent, new, new_ns); sysfs_rename_link_ns()
194 kernfs_put(kn); sysfs_rename_link_ns()
H A Dgroup.c97 struct kernfs_node *kn; internal_create_group() local
111 kn = kernfs_create_dir(kobj->sd, grp->name, internal_create_group()
113 if (IS_ERR(kn)) { internal_create_group()
114 if (PTR_ERR(kn) == -EEXIST) internal_create_group()
116 return PTR_ERR(kn); internal_create_group()
119 kn = kobj->sd; internal_create_group()
120 kernfs_get(kn); internal_create_group()
121 error = create_files(kn, kobj, grp, update); internal_create_group()
124 kernfs_remove(kn); internal_create_group()
126 kernfs_put(kn); internal_create_group()
217 struct kernfs_node *kn; sysfs_remove_group() local
220 kn = kernfs_find_and_get(parent, grp->name); sysfs_remove_group()
221 if (!kn) { sysfs_remove_group()
222 WARN(!kn, KERN_WARNING sysfs_remove_group()
228 kn = parent; sysfs_remove_group()
229 kernfs_get(kn); sysfs_remove_group()
232 remove_files(kn, grp); sysfs_remove_group()
234 kernfs_remove(kn); sysfs_remove_group()
236 kernfs_put(kn); sysfs_remove_group()
H A Dsysfs.h40 int sysfs_create_link_sd(struct kernfs_node *kn, struct kobject *target,
H A Dmount.c70 sysfs_root_kn = sysfs_root->kn; sysfs_init()
/linux-4.1.27/kernel/
H A Dcgroup.c332 struct cgroup *cgrp = of->kn->parent->priv; of_css()
853 struct cgroup *root_cgrp = kf_root->kn->priv; cgroup_root_from_kf()
1124 * @kn: the kernfs_node being serviced
1132 static void cgroup_kn_unlock(struct kernfs_node *kn) cgroup_kn_unlock() argument
1136 if (kernfs_type(kn) == KERNFS_DIR) cgroup_kn_unlock()
1137 cgrp = kn->priv; cgroup_kn_unlock()
1139 cgrp = kn->parent->priv; cgroup_kn_unlock()
1143 kernfs_unbreak_active_protection(kn); cgroup_kn_unlock()
1149 * @kn: the kernfs_node being serviced
1152 * @kn. It breaks the active protection, performs cgroup locking and
1162 static struct cgroup *cgroup_kn_lock_live(struct kernfs_node *kn) cgroup_kn_lock_live() argument
1166 if (kernfs_type(kn) == KERNFS_DIR) cgroup_kn_lock_live()
1167 cgrp = kn->priv; cgroup_kn_lock_live()
1169 cgrp = kn->parent->priv; cgroup_kn_lock_live()
1179 kernfs_break_active_protection(kn); cgroup_kn_lock_live()
1186 cgroup_kn_unlock(kn); cgroup_kn_lock_live()
1195 kernfs_remove_by_name(cgrp->kn, cgroup_file_name(cgrp, cft, name)); cgroup_rm_file()
1309 kernfs_activate(dst_root->cgrp.kn);
1686 root_cgrp->kn = root->kf_root->kn; cgroup_setup_root()
1721 kernfs_activate(root_cgrp->kn); cgroup_setup_root()
2395 cgrp = cgroup_kn_lock_live(of->kn); __cgroup_procs_write()
2462 cgroup_kn_unlock(of->kn); __cgroup_procs_write()
2516 cgrp = cgroup_kn_lock_live(of->kn); cgroup_release_agent_write()
2523 cgroup_kn_unlock(of->kn); cgroup_release_agent_write()
2726 cgrp = cgroup_kn_lock_live(of->kn);
2808 cgroup_kn_unlock(of->kn); cgroup_for_each_live_child()
2893 kernfs_activate(cgrp->kn);
2896 cgroup_kn_unlock(of->kn);
2931 struct cgroup *cgrp = of->kn->parent->priv; cgroup_file_write()
2932 struct cftype *cft = of->kn->priv; cgroup_file_write()
3016 static int cgroup_rename(struct kernfs_node *kn, struct kernfs_node *new_parent, cgroup_rename() argument
3019 struct cgroup *cgrp = kn->priv; cgroup_rename()
3022 if (kernfs_type(kn) != KERNFS_DIR) cgroup_rename()
3024 if (kn->parent != new_parent) cgroup_rename()
3040 kernfs_break_active_protection(kn); cgroup_rename()
3044 ret = kernfs_rename(kn, new_parent, new_name_str); cgroup_rename()
3048 kernfs_unbreak_active_protection(kn); cgroup_rename()
3054 static int cgroup_kn_set_ugid(struct kernfs_node *kn) cgroup_kn_set_ugid() argument
3064 return kernfs_setattr(kn, &iattr); cgroup_kn_set_ugid()
3070 struct kernfs_node *kn; cgroup_add_file() local
3077 kn = __kernfs_create_file(cgrp->kn, cgroup_file_name(cgrp, cft, name), cgroup_add_file()
3080 if (IS_ERR(kn)) cgroup_add_file()
3081 return PTR_ERR(kn); cgroup_add_file()
3083 ret = cgroup_kn_set_ugid(kn); cgroup_add_file()
3085 kernfs_remove(kn); cgroup_add_file()
3090 cgrp->populated_kn = kn; cgroup_add_file()
3161 kernfs_activate(root->kn);
4045 struct kernfs_node *kn = kernfs_node_from_dentry(dentry); cgroupstats_build() local
4051 if (dentry->d_sb->s_type != &cgroup_fs_type || !kn || cgroupstats_build()
4052 kernfs_type(kn) != KERNFS_DIR) cgroupstats_build()
4059 * @kn->priv's validity. For this and css_tryget_online_from_dir(), cgroupstats_build()
4060 * @kn->priv is RCU safe. Let's do the RCU dancing. cgroupstats_build()
4063 cgrp = rcu_dereference(kn->priv); cgroupstats_build()
4403 kernfs_put(cgrp->kn); css_free_work_fn()
4452 * cgrp->kn->priv backpointer. css_release_work_fn()
4454 RCU_INIT_POINTER(*(void __rcu __force **)&cgrp->kn->priv, NULL); css_release_work_fn()
4612 struct kernfs_node *kn; cgroup_mkdir() local
4659 kn = kernfs_create_dir(parent->kn, name, mode, cgrp); cgroup_mkdir()
4660 if (IS_ERR(kn)) { cgroup_mkdir()
4661 ret = PTR_ERR(kn); cgroup_mkdir()
4664 cgrp->kn = kn; cgroup_mkdir()
4668 * that @cgrp->kn is always accessible. cgroup_mkdir()
4670 kernfs_get(kn); cgroup_mkdir()
4685 ret = cgroup_kn_set_ugid(kn); cgroup_mkdir()
4717 kernfs_activate(kn);
4872 * extra ref on its kn.
4874 kernfs_remove(cgrp->kn);
4884 static int cgroup_rmdir(struct kernfs_node *kn) cgroup_rmdir() argument
4889 cgrp = cgroup_kn_lock_live(kn); cgroup_rmdir()
4895 cgroup_kn_unlock(kn); cgroup_rmdir()
5429 struct kernfs_node *kn = kernfs_node_from_dentry(dentry); css_tryget_online_from_dir() local
5434 if (dentry->d_sb->s_type != &cgroup_fs_type || !kn || css_tryget_online_from_dir()
5435 kernfs_type(kn) != KERNFS_DIR) css_tryget_online_from_dir()
5441 * This path doesn't originate from kernfs and @kn could already css_tryget_online_from_dir()
5442 * have been or be removed at any point. @kn->priv is RCU css_tryget_online_from_dir()
5445 cgrp = rcu_dereference(kn->priv); css_tryget_online_from_dir()
H A Dcpuset.c1671 kernfs_break_active_protection(of->kn); cpuset_write_resmask()
1699 kernfs_unbreak_active_protection(of->kn); cpuset_write_resmask()
/linux-4.1.27/net/mac802154/
H A Dllsec.c50 struct ieee802154_llsec_key_entry *key, *kn; mac802154_llsec_destroy() local
68 list_for_each_entry_safe(key, kn, &sec->table.keys, list) { mac802154_llsec_destroy()
/linux-4.1.27/drivers/media/i2c/
H A Dvs6624_regs.h326 #define VS6624_NORA_SPLIT_KN 0x2604 /* split kn */
/linux-4.1.27/drivers/s390/block/
H A Ddasd_eckd.c173 int dn, kn; recs_per_track() local
185 kn = ceil_quot(kl + 6, 232) + 1; recs_per_track()
186 return 1729 / (10 + 9 + ceil_quot(kl + 6 * kn, 34) + recs_per_track()
193 kn = ceil_quot(kl + 6, 232) + 1; recs_per_track()
194 return 1420 / (18 + 7 + ceil_quot(kl + 6 * kn, 34) + recs_per_track()
/linux-4.1.27/drivers/of/
H A Dbase.c118 struct kernfs_node *kn; safe_name() local
122 while (i < 16 && (kn = sysfs_get_dirent(kobj->sd, name))) { safe_name()
123 sysfs_put(kn); safe_name()

Completed in 473 milliseconds