/linux-4.1.27/fs/kernfs/ |
H A D | symlink.c | 29 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 D | dir.c | 22 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 D | inode.c | 37 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 D | kernfs-internal.h | 36 * @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 D | file.c | 64 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 D | mount.c | 80 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 D | kernfs.h | 76 /* 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 D | sysfs.h | 276 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 D | cgroup.h | 191 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 D | cgroup-defs.h | 226 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 D | dir.c | 43 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 D | file.c | 28 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 D | symlink.c | 25 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 D | group.c | 97 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 D | sysfs.h | 40 int sysfs_create_link_sd(struct kernfs_node *kn, struct kobject *target,
|
H A D | mount.c | 70 sysfs_root_kn = sysfs_root->kn; sysfs_init()
|
/linux-4.1.27/kernel/ |
H A D | cgroup.c | 332 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 D | cpuset.c | 1671 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 D | llsec.c | 50 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 D | vs6624_regs.h | 326 #define VS6624_NORA_SPLIT_KN 0x2604 /* split kn */
|
/linux-4.1.27/drivers/s390/block/ |
H A D | dasd_eckd.c | 173 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 D | base.c | 118 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()
|