1 /* 2 * fs/kernfs/dir.c - kernfs directory implementation 3 * 4 * Copyright (c) 2001-3 Patrick Mochel 5 * Copyright (c) 2007 SUSE Linux Products GmbH 6 * Copyright (c) 2007, 2013 Tejun Heo <tj@kernel.org> 7 * 8 * This file is released under the GPLv2. 9 */ 10 11 #include <linux/sched.h> 12 #include <linux/fs.h> 13 #include <linux/namei.h> 14 #include <linux/idr.h> 15 #include <linux/slab.h> 16 #include <linux/security.h> 17 #include <linux/hash.h> 18 19 #include "kernfs-internal.h" 20 21 DEFINE_MUTEX(kernfs_mutex); 22 static DEFINE_SPINLOCK(kernfs_rename_lock); /* kn->parent and ->name */ 23 static char kernfs_pr_cont_buf[PATH_MAX]; /* protected by rename_lock */ 24 25 #define rb_to_kn(X) rb_entry((X), struct kernfs_node, rb) 26 27 static bool kernfs_active(struct kernfs_node *kn) 28 { 29 lockdep_assert_held(&kernfs_mutex); 30 return atomic_read(&kn->active) >= 0; 31 } 32 33 static bool kernfs_lockdep(struct kernfs_node *kn) 34 { 35 #ifdef CONFIG_DEBUG_LOCK_ALLOC 36 return kn->flags & KERNFS_LOCKDEP; 37 #else 38 return false; 39 #endif 40 } 41 42 static int kernfs_name_locked(struct kernfs_node *kn, char *buf, size_t buflen) 43 { 44 return strlcpy(buf, kn->parent ? kn->name : "/", buflen); 45 } 46 47 static char * __must_check kernfs_path_locked(struct kernfs_node *kn, char *buf, 48 size_t buflen) 49 { 50 char *p = buf + buflen; 51 int len; 52 53 *--p = '\0'; 54 55 do { 56 len = strlen(kn->name); 57 if (p - buf < len + 1) { 58 buf[0] = '\0'; 59 p = NULL; 60 break; 61 } 62 p -= len; 63 memcpy(p, kn->name, len); 64 *--p = '/'; 65 kn = kn->parent; 66 } while (kn && kn->parent); 67 68 return p; 69 } 70 71 /** 72 * kernfs_name - obtain the name of a given node 73 * @kn: kernfs_node of interest 74 * @buf: buffer to copy @kn's name into 75 * @buflen: size of @buf 76 * 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 79 * isn't long enough, it's filled upto @buflen-1 and nul terminated. 80 * 81 * This function can be called from any context. 82 */ 83 int kernfs_name(struct kernfs_node *kn, char *buf, size_t buflen) 84 { 85 unsigned long flags; 86 int ret; 87 88 spin_lock_irqsave(&kernfs_rename_lock, flags); 89 ret = kernfs_name_locked(kn, buf, buflen); 90 spin_unlock_irqrestore(&kernfs_rename_lock, flags); 91 return ret; 92 } 93 94 /** 95 * kernfs_path_len - determine the length of the full path of a given node 96 * @kn: kernfs_node of interest 97 * 98 * The returned length doesn't include the space for the terminating '\0'. 99 */ 100 size_t kernfs_path_len(struct kernfs_node *kn) 101 { 102 size_t len = 0; 103 unsigned long flags; 104 105 spin_lock_irqsave(&kernfs_rename_lock, flags); 106 107 do { 108 len += strlen(kn->name) + 1; 109 kn = kn->parent; 110 } while (kn && kn->parent); 111 112 spin_unlock_irqrestore(&kernfs_rename_lock, flags); 113 114 return len; 115 } 116 117 /** 118 * kernfs_path - build full path of a given node 119 * @kn: kernfs_node of interest 120 * @buf: buffer to copy @kn's name into 121 * @buflen: size of @buf 122 * 123 * Builds and returns the full path of @kn in @buf of @buflen bytes. The 124 * path is built from the end of @buf so the returned pointer usually 125 * doesn't match @buf. If @buf isn't long enough, @buf is nul terminated 126 * and %NULL is returned. 127 */ 128 char *kernfs_path(struct kernfs_node *kn, char *buf, size_t buflen) 129 { 130 unsigned long flags; 131 char *p; 132 133 spin_lock_irqsave(&kernfs_rename_lock, flags); 134 p = kernfs_path_locked(kn, buf, buflen); 135 spin_unlock_irqrestore(&kernfs_rename_lock, flags); 136 return p; 137 } 138 EXPORT_SYMBOL_GPL(kernfs_path); 139 140 /** 141 * pr_cont_kernfs_name - pr_cont name of a kernfs_node 142 * @kn: kernfs_node of interest 143 * 144 * This function can be called from any context. 145 */ 146 void pr_cont_kernfs_name(struct kernfs_node *kn) 147 { 148 unsigned long flags; 149 150 spin_lock_irqsave(&kernfs_rename_lock, flags); 151 152 kernfs_name_locked(kn, kernfs_pr_cont_buf, sizeof(kernfs_pr_cont_buf)); 153 pr_cont("%s", kernfs_pr_cont_buf); 154 155 spin_unlock_irqrestore(&kernfs_rename_lock, flags); 156 } 157 158 /** 159 * pr_cont_kernfs_path - pr_cont path of a kernfs_node 160 * @kn: kernfs_node of interest 161 * 162 * This function can be called from any context. 163 */ 164 void pr_cont_kernfs_path(struct kernfs_node *kn) 165 { 166 unsigned long flags; 167 char *p; 168 169 spin_lock_irqsave(&kernfs_rename_lock, flags); 170 171 p = kernfs_path_locked(kn, kernfs_pr_cont_buf, 172 sizeof(kernfs_pr_cont_buf)); 173 if (p) 174 pr_cont("%s", p); 175 else 176 pr_cont("<name too long>"); 177 178 spin_unlock_irqrestore(&kernfs_rename_lock, flags); 179 } 180 181 /** 182 * kernfs_get_parent - determine the parent node and pin it 183 * @kn: kernfs_node of interest 184 * 185 * Determines @kn's parent, pins and returns it. This function can be 186 * called from any context. 187 */ 188 struct kernfs_node *kernfs_get_parent(struct kernfs_node *kn) 189 { 190 struct kernfs_node *parent; 191 unsigned long flags; 192 193 spin_lock_irqsave(&kernfs_rename_lock, flags); 194 parent = kn->parent; 195 kernfs_get(parent); 196 spin_unlock_irqrestore(&kernfs_rename_lock, flags); 197 198 return parent; 199 } 200 201 /** 202 * kernfs_name_hash 203 * @name: Null terminated string to hash 204 * @ns: Namespace tag to hash 205 * 206 * Returns 31 bit hash of ns + name (so it fits in an off_t ) 207 */ 208 static unsigned int kernfs_name_hash(const char *name, const void *ns) 209 { 210 unsigned long hash = init_name_hash(); 211 unsigned int len = strlen(name); 212 while (len--) 213 hash = partial_name_hash(*name++, hash); 214 hash = (end_name_hash(hash) ^ hash_ptr((void *)ns, 31)); 215 hash &= 0x7fffffffU; 216 /* Reserve hash numbers 0, 1 and INT_MAX for magic directory entries */ 217 if (hash < 2) 218 hash += 2; 219 if (hash >= INT_MAX) 220 hash = INT_MAX - 1; 221 return hash; 222 } 223 224 static int kernfs_name_compare(unsigned int hash, const char *name, 225 const void *ns, const struct kernfs_node *kn) 226 { 227 if (hash < kn->hash) 228 return -1; 229 if (hash > kn->hash) 230 return 1; 231 if (ns < kn->ns) 232 return -1; 233 if (ns > kn->ns) 234 return 1; 235 return strcmp(name, kn->name); 236 } 237 238 static int kernfs_sd_compare(const struct kernfs_node *left, 239 const struct kernfs_node *right) 240 { 241 return kernfs_name_compare(left->hash, left->name, left->ns, right); 242 } 243 244 /** 245 * kernfs_link_sibling - link kernfs_node into sibling rbtree 246 * @kn: kernfs_node of interest 247 * 248 * Link @kn into its sibling rbtree which starts from 249 * @kn->parent->dir.children. 250 * 251 * Locking: 252 * mutex_lock(kernfs_mutex) 253 * 254 * RETURNS: 255 * 0 on susccess -EEXIST on failure. 256 */ 257 static int kernfs_link_sibling(struct kernfs_node *kn) 258 { 259 struct rb_node **node = &kn->parent->dir.children.rb_node; 260 struct rb_node *parent = NULL; 261 262 while (*node) { 263 struct kernfs_node *pos; 264 int result; 265 266 pos = rb_to_kn(*node); 267 parent = *node; 268 result = kernfs_sd_compare(kn, pos); 269 if (result < 0) 270 node = &pos->rb.rb_left; 271 else if (result > 0) 272 node = &pos->rb.rb_right; 273 else 274 return -EEXIST; 275 } 276 277 /* add new node and rebalance the tree */ 278 rb_link_node(&kn->rb, parent, node); 279 rb_insert_color(&kn->rb, &kn->parent->dir.children); 280 281 /* successfully added, account subdir number */ 282 if (kernfs_type(kn) == KERNFS_DIR) 283 kn->parent->dir.subdirs++; 284 285 return 0; 286 } 287 288 /** 289 * kernfs_unlink_sibling - unlink kernfs_node from sibling rbtree 290 * @kn: kernfs_node of interest 291 * 292 * Try to unlink @kn from its sibling rbtree which starts from 293 * kn->parent->dir.children. Returns %true if @kn was actually 294 * removed, %false if @kn wasn't on the rbtree. 295 * 296 * Locking: 297 * mutex_lock(kernfs_mutex) 298 */ 299 static bool kernfs_unlink_sibling(struct kernfs_node *kn) 300 { 301 if (RB_EMPTY_NODE(&kn->rb)) 302 return false; 303 304 if (kernfs_type(kn) == KERNFS_DIR) 305 kn->parent->dir.subdirs--; 306 307 rb_erase(&kn->rb, &kn->parent->dir.children); 308 RB_CLEAR_NODE(&kn->rb); 309 return true; 310 } 311 312 /** 313 * kernfs_get_active - get an active reference to kernfs_node 314 * @kn: kernfs_node to get an active reference to 315 * 316 * Get an active reference of @kn. This function is noop if @kn 317 * is NULL. 318 * 319 * RETURNS: 320 * Pointer to @kn on success, NULL on failure. 321 */ 322 struct kernfs_node *kernfs_get_active(struct kernfs_node *kn) 323 { 324 if (unlikely(!kn)) 325 return NULL; 326 327 if (!atomic_inc_unless_negative(&kn->active)) 328 return NULL; 329 330 if (kernfs_lockdep(kn)) 331 rwsem_acquire_read(&kn->dep_map, 0, 1, _RET_IP_); 332 return kn; 333 } 334 335 /** 336 * kernfs_put_active - put an active reference to kernfs_node 337 * @kn: kernfs_node to put an active reference to 338 * 339 * Put an active reference to @kn. This function is noop if @kn 340 * is NULL. 341 */ 342 void kernfs_put_active(struct kernfs_node *kn) 343 { 344 struct kernfs_root *root = kernfs_root(kn); 345 int v; 346 347 if (unlikely(!kn)) 348 return; 349 350 if (kernfs_lockdep(kn)) 351 rwsem_release(&kn->dep_map, 1, _RET_IP_); 352 v = atomic_dec_return(&kn->active); 353 if (likely(v != KN_DEACTIVATED_BIAS)) 354 return; 355 356 wake_up_all(&root->deactivate_waitq); 357 } 358 359 /** 360 * kernfs_drain - drain kernfs_node 361 * @kn: kernfs_node to drain 362 * 363 * Drain existing usages and nuke all existing mmaps of @kn. Mutiple 364 * removers may invoke this function concurrently on @kn and all will 365 * return after draining is complete. 366 */ 367 static void kernfs_drain(struct kernfs_node *kn) 368 __releases(&kernfs_mutex) __acquires(&kernfs_mutex) 369 { 370 struct kernfs_root *root = kernfs_root(kn); 371 372 lockdep_assert_held(&kernfs_mutex); 373 WARN_ON_ONCE(kernfs_active(kn)); 374 375 mutex_unlock(&kernfs_mutex); 376 377 if (kernfs_lockdep(kn)) { 378 rwsem_acquire(&kn->dep_map, 0, 0, _RET_IP_); 379 if (atomic_read(&kn->active) != KN_DEACTIVATED_BIAS) 380 lock_contended(&kn->dep_map, _RET_IP_); 381 } 382 383 /* but everyone should wait for draining */ 384 wait_event(root->deactivate_waitq, 385 atomic_read(&kn->active) == KN_DEACTIVATED_BIAS); 386 387 if (kernfs_lockdep(kn)) { 388 lock_acquired(&kn->dep_map, _RET_IP_); 389 rwsem_release(&kn->dep_map, 1, _RET_IP_); 390 } 391 392 kernfs_unmap_bin_file(kn); 393 394 mutex_lock(&kernfs_mutex); 395 } 396 397 /** 398 * kernfs_get - get a reference count on a kernfs_node 399 * @kn: the target kernfs_node 400 */ 401 void kernfs_get(struct kernfs_node *kn) 402 { 403 if (kn) { 404 WARN_ON(!atomic_read(&kn->count)); 405 atomic_inc(&kn->count); 406 } 407 } 408 EXPORT_SYMBOL_GPL(kernfs_get); 409 410 /** 411 * kernfs_put - put a reference count on a kernfs_node 412 * @kn: the target kernfs_node 413 * 414 * Put a reference count of @kn and destroy it if it reached zero. 415 */ 416 void kernfs_put(struct kernfs_node *kn) 417 { 418 struct kernfs_node *parent; 419 struct kernfs_root *root; 420 421 if (!kn || !atomic_dec_and_test(&kn->count)) 422 return; 423 root = kernfs_root(kn); 424 repeat: 425 /* 426 * Moving/renaming is always done while holding reference. 427 * kn->parent won't change beneath us. 428 */ 429 parent = kn->parent; 430 431 WARN_ONCE(atomic_read(&kn->active) != KN_DEACTIVATED_BIAS, 432 "kernfs_put: %s/%s: released with incorrect active_ref %d\n", 433 parent ? parent->name : "", kn->name, atomic_read(&kn->active)); 434 435 if (kernfs_type(kn) == KERNFS_LINK) 436 kernfs_put(kn->symlink.target_kn); 437 438 kfree_const(kn->name); 439 440 if (kn->iattr) { 441 if (kn->iattr->ia_secdata) 442 security_release_secctx(kn->iattr->ia_secdata, 443 kn->iattr->ia_secdata_len); 444 simple_xattrs_free(&kn->iattr->xattrs); 445 } 446 kfree(kn->iattr); 447 ida_simple_remove(&root->ino_ida, kn->ino); 448 kmem_cache_free(kernfs_node_cache, kn); 449 450 kn = parent; 451 if (kn) { 452 if (atomic_dec_and_test(&kn->count)) 453 goto repeat; 454 } else { 455 /* just released the root kn, free @root too */ 456 ida_destroy(&root->ino_ida); 457 kfree(root); 458 } 459 } 460 EXPORT_SYMBOL_GPL(kernfs_put); 461 462 static int kernfs_dop_revalidate(struct dentry *dentry, unsigned int flags) 463 { 464 struct kernfs_node *kn; 465 466 if (flags & LOOKUP_RCU) 467 return -ECHILD; 468 469 /* Always perform fresh lookup for negatives */ 470 if (d_really_is_negative(dentry)) 471 goto out_bad_unlocked; 472 473 kn = dentry->d_fsdata; 474 mutex_lock(&kernfs_mutex); 475 476 /* The kernfs node has been deactivated */ 477 if (!kernfs_active(kn)) 478 goto out_bad; 479 480 /* The kernfs node has been moved? */ 481 if (dentry->d_parent->d_fsdata != kn->parent) 482 goto out_bad; 483 484 /* The kernfs node has been renamed */ 485 if (strcmp(dentry->d_name.name, kn->name) != 0) 486 goto out_bad; 487 488 /* The kernfs node has been moved to a different namespace */ 489 if (kn->parent && kernfs_ns_enabled(kn->parent) && 490 kernfs_info(dentry->d_sb)->ns != kn->ns) 491 goto out_bad; 492 493 mutex_unlock(&kernfs_mutex); 494 return 1; 495 out_bad: 496 mutex_unlock(&kernfs_mutex); 497 out_bad_unlocked: 498 return 0; 499 } 500 501 static void kernfs_dop_release(struct dentry *dentry) 502 { 503 kernfs_put(dentry->d_fsdata); 504 } 505 506 const struct dentry_operations kernfs_dops = { 507 .d_revalidate = kernfs_dop_revalidate, 508 .d_release = kernfs_dop_release, 509 }; 510 511 /** 512 * kernfs_node_from_dentry - determine kernfs_node associated with a dentry 513 * @dentry: the dentry in question 514 * 515 * Return the kernfs_node associated with @dentry. If @dentry is not a 516 * kernfs one, %NULL is returned. 517 * 518 * While the returned kernfs_node will stay accessible as long as @dentry 519 * is accessible, the returned node can be in any state and the caller is 520 * fully responsible for determining what's accessible. 521 */ 522 struct kernfs_node *kernfs_node_from_dentry(struct dentry *dentry) 523 { 524 if (dentry->d_sb->s_op == &kernfs_sops) 525 return dentry->d_fsdata; 526 return NULL; 527 } 528 529 static struct kernfs_node *__kernfs_new_node(struct kernfs_root *root, 530 const char *name, umode_t mode, 531 unsigned flags) 532 { 533 struct kernfs_node *kn; 534 int ret; 535 536 name = kstrdup_const(name, GFP_KERNEL); 537 if (!name) 538 return NULL; 539 540 kn = kmem_cache_zalloc(kernfs_node_cache, GFP_KERNEL); 541 if (!kn) 542 goto err_out1; 543 544 /* 545 * If the ino of the sysfs entry created for a kmem cache gets 546 * allocated from an ida layer, which is accounted to the memcg that 547 * owns the cache, the memcg will get pinned forever. So do not account 548 * ino ida allocations. 549 */ 550 ret = ida_simple_get(&root->ino_ida, 1, 0, 551 GFP_KERNEL | __GFP_NOACCOUNT); 552 if (ret < 0) 553 goto err_out2; 554 kn->ino = ret; 555 556 atomic_set(&kn->count, 1); 557 atomic_set(&kn->active, KN_DEACTIVATED_BIAS); 558 RB_CLEAR_NODE(&kn->rb); 559 560 kn->name = name; 561 kn->mode = mode; 562 kn->flags = flags; 563 564 return kn; 565 566 err_out2: 567 kmem_cache_free(kernfs_node_cache, kn); 568 err_out1: 569 kfree_const(name); 570 return NULL; 571 } 572 573 struct kernfs_node *kernfs_new_node(struct kernfs_node *parent, 574 const char *name, umode_t mode, 575 unsigned flags) 576 { 577 struct kernfs_node *kn; 578 579 kn = __kernfs_new_node(kernfs_root(parent), name, mode, flags); 580 if (kn) { 581 kernfs_get(parent); 582 kn->parent = parent; 583 } 584 return kn; 585 } 586 587 /** 588 * kernfs_add_one - add kernfs_node to parent without warning 589 * @kn: kernfs_node to be added 590 * 591 * The caller must already have initialized @kn->parent. This 592 * function increments nlink of the parent's inode if @kn is a 593 * directory and link into the children list of the parent. 594 * 595 * RETURNS: 596 * 0 on success, -EEXIST if entry with the given name already 597 * exists. 598 */ 599 int kernfs_add_one(struct kernfs_node *kn) 600 { 601 struct kernfs_node *parent = kn->parent; 602 struct kernfs_iattrs *ps_iattr; 603 bool has_ns; 604 int ret; 605 606 mutex_lock(&kernfs_mutex); 607 608 ret = -EINVAL; 609 has_ns = kernfs_ns_enabled(parent); 610 if (WARN(has_ns != (bool)kn->ns, KERN_WARNING "kernfs: ns %s in '%s' for '%s'\n", 611 has_ns ? "required" : "invalid", parent->name, kn->name)) 612 goto out_unlock; 613 614 if (kernfs_type(parent) != KERNFS_DIR) 615 goto out_unlock; 616 617 ret = -ENOENT; 618 if (parent->flags & KERNFS_EMPTY_DIR) 619 goto out_unlock; 620 621 if ((parent->flags & KERNFS_ACTIVATED) && !kernfs_active(parent)) 622 goto out_unlock; 623 624 kn->hash = kernfs_name_hash(kn->name, kn->ns); 625 626 ret = kernfs_link_sibling(kn); 627 if (ret) 628 goto out_unlock; 629 630 /* Update timestamps on the parent */ 631 ps_iattr = parent->iattr; 632 if (ps_iattr) { 633 struct iattr *ps_iattrs = &ps_iattr->ia_iattr; 634 ps_iattrs->ia_ctime = ps_iattrs->ia_mtime = CURRENT_TIME; 635 } 636 637 mutex_unlock(&kernfs_mutex); 638 639 /* 640 * Activate the new node unless CREATE_DEACTIVATED is requested. 641 * If not activated here, the kernfs user is responsible for 642 * activating the node with kernfs_activate(). A node which hasn't 643 * been activated is not visible to userland and its removal won't 644 * trigger deactivation. 645 */ 646 if (!(kernfs_root(kn)->flags & KERNFS_ROOT_CREATE_DEACTIVATED)) 647 kernfs_activate(kn); 648 return 0; 649 650 out_unlock: 651 mutex_unlock(&kernfs_mutex); 652 return ret; 653 } 654 655 /** 656 * kernfs_find_ns - find kernfs_node with the given name 657 * @parent: kernfs_node to search under 658 * @name: name to look for 659 * @ns: the namespace tag to use 660 * 661 * Look for kernfs_node with name @name under @parent. Returns pointer to 662 * the found kernfs_node on success, %NULL on failure. 663 */ 664 static struct kernfs_node *kernfs_find_ns(struct kernfs_node *parent, 665 const unsigned char *name, 666 const void *ns) 667 { 668 struct rb_node *node = parent->dir.children.rb_node; 669 bool has_ns = kernfs_ns_enabled(parent); 670 unsigned int hash; 671 672 lockdep_assert_held(&kernfs_mutex); 673 674 if (has_ns != (bool)ns) { 675 WARN(1, KERN_WARNING "kernfs: ns %s in '%s' for '%s'\n", 676 has_ns ? "required" : "invalid", parent->name, name); 677 return NULL; 678 } 679 680 hash = kernfs_name_hash(name, ns); 681 while (node) { 682 struct kernfs_node *kn; 683 int result; 684 685 kn = rb_to_kn(node); 686 result = kernfs_name_compare(hash, name, ns, kn); 687 if (result < 0) 688 node = node->rb_left; 689 else if (result > 0) 690 node = node->rb_right; 691 else 692 return kn; 693 } 694 return NULL; 695 } 696 697 /** 698 * kernfs_find_and_get_ns - find and get kernfs_node with the given name 699 * @parent: kernfs_node to search under 700 * @name: name to look for 701 * @ns: the namespace tag to use 702 * 703 * Look for kernfs_node with name @name under @parent and get a reference 704 * if found. This function may sleep and returns pointer to the found 705 * kernfs_node on success, %NULL on failure. 706 */ 707 struct kernfs_node *kernfs_find_and_get_ns(struct kernfs_node *parent, 708 const char *name, const void *ns) 709 { 710 struct kernfs_node *kn; 711 712 mutex_lock(&kernfs_mutex); 713 kn = kernfs_find_ns(parent, name, ns); 714 kernfs_get(kn); 715 mutex_unlock(&kernfs_mutex); 716 717 return kn; 718 } 719 EXPORT_SYMBOL_GPL(kernfs_find_and_get_ns); 720 721 /** 722 * kernfs_create_root - create a new kernfs hierarchy 723 * @scops: optional syscall operations for the hierarchy 724 * @flags: KERNFS_ROOT_* flags 725 * @priv: opaque data associated with the new directory 726 * 727 * Returns the root of the new hierarchy on success, ERR_PTR() value on 728 * failure. 729 */ 730 struct kernfs_root *kernfs_create_root(struct kernfs_syscall_ops *scops, 731 unsigned int flags, void *priv) 732 { 733 struct kernfs_root *root; 734 struct kernfs_node *kn; 735 736 root = kzalloc(sizeof(*root), GFP_KERNEL); 737 if (!root) 738 return ERR_PTR(-ENOMEM); 739 740 ida_init(&root->ino_ida); 741 INIT_LIST_HEAD(&root->supers); 742 743 kn = __kernfs_new_node(root, "", S_IFDIR | S_IRUGO | S_IXUGO, 744 KERNFS_DIR); 745 if (!kn) { 746 ida_destroy(&root->ino_ida); 747 kfree(root); 748 return ERR_PTR(-ENOMEM); 749 } 750 751 kn->priv = priv; 752 kn->dir.root = root; 753 754 root->syscall_ops = scops; 755 root->flags = flags; 756 root->kn = kn; 757 init_waitqueue_head(&root->deactivate_waitq); 758 759 if (!(root->flags & KERNFS_ROOT_CREATE_DEACTIVATED)) 760 kernfs_activate(kn); 761 762 return root; 763 } 764 765 /** 766 * kernfs_destroy_root - destroy a kernfs hierarchy 767 * @root: root of the hierarchy to destroy 768 * 769 * Destroy the hierarchy anchored at @root by removing all existing 770 * directories and destroying @root. 771 */ 772 void kernfs_destroy_root(struct kernfs_root *root) 773 { 774 kernfs_remove(root->kn); /* will also free @root */ 775 } 776 777 /** 778 * kernfs_create_dir_ns - create a directory 779 * @parent: parent in which to create a new directory 780 * @name: name of the new directory 781 * @mode: mode of the new directory 782 * @priv: opaque data associated with the new directory 783 * @ns: optional namespace tag of the directory 784 * 785 * Returns the created node on success, ERR_PTR() value on failure. 786 */ 787 struct kernfs_node *kernfs_create_dir_ns(struct kernfs_node *parent, 788 const char *name, umode_t mode, 789 void *priv, const void *ns) 790 { 791 struct kernfs_node *kn; 792 int rc; 793 794 /* allocate */ 795 kn = kernfs_new_node(parent, name, mode | S_IFDIR, KERNFS_DIR); 796 if (!kn) 797 return ERR_PTR(-ENOMEM); 798 799 kn->dir.root = parent->dir.root; 800 kn->ns = ns; 801 kn->priv = priv; 802 803 /* link in */ 804 rc = kernfs_add_one(kn); 805 if (!rc) 806 return kn; 807 808 kernfs_put(kn); 809 return ERR_PTR(rc); 810 } 811 812 /** 813 * kernfs_create_empty_dir - create an always empty directory 814 * @parent: parent in which to create a new directory 815 * @name: name of the new directory 816 * 817 * Returns the created node on success, ERR_PTR() value on failure. 818 */ 819 struct kernfs_node *kernfs_create_empty_dir(struct kernfs_node *parent, 820 const char *name) 821 { 822 struct kernfs_node *kn; 823 int rc; 824 825 /* allocate */ 826 kn = kernfs_new_node(parent, name, S_IRUGO|S_IXUGO|S_IFDIR, KERNFS_DIR); 827 if (!kn) 828 return ERR_PTR(-ENOMEM); 829 830 kn->flags |= KERNFS_EMPTY_DIR; 831 kn->dir.root = parent->dir.root; 832 kn->ns = NULL; 833 kn->priv = NULL; 834 835 /* link in */ 836 rc = kernfs_add_one(kn); 837 if (!rc) 838 return kn; 839 840 kernfs_put(kn); 841 return ERR_PTR(rc); 842 } 843 844 static struct dentry *kernfs_iop_lookup(struct inode *dir, 845 struct dentry *dentry, 846 unsigned int flags) 847 { 848 struct dentry *ret; 849 struct kernfs_node *parent = dentry->d_parent->d_fsdata; 850 struct kernfs_node *kn; 851 struct inode *inode; 852 const void *ns = NULL; 853 854 mutex_lock(&kernfs_mutex); 855 856 if (kernfs_ns_enabled(parent)) 857 ns = kernfs_info(dir->i_sb)->ns; 858 859 kn = kernfs_find_ns(parent, dentry->d_name.name, ns); 860 861 /* no such entry */ 862 if (!kn || !kernfs_active(kn)) { 863 ret = NULL; 864 goto out_unlock; 865 } 866 kernfs_get(kn); 867 dentry->d_fsdata = kn; 868 869 /* attach dentry and inode */ 870 inode = kernfs_get_inode(dir->i_sb, kn); 871 if (!inode) { 872 ret = ERR_PTR(-ENOMEM); 873 goto out_unlock; 874 } 875 876 /* instantiate and hash dentry */ 877 ret = d_splice_alias(inode, dentry); 878 out_unlock: 879 mutex_unlock(&kernfs_mutex); 880 return ret; 881 } 882 883 static int kernfs_iop_mkdir(struct inode *dir, struct dentry *dentry, 884 umode_t mode) 885 { 886 struct kernfs_node *parent = dir->i_private; 887 struct kernfs_syscall_ops *scops = kernfs_root(parent)->syscall_ops; 888 int ret; 889 890 if (!scops || !scops->mkdir) 891 return -EPERM; 892 893 if (!kernfs_get_active(parent)) 894 return -ENODEV; 895 896 ret = scops->mkdir(parent, dentry->d_name.name, mode); 897 898 kernfs_put_active(parent); 899 return ret; 900 } 901 902 static int kernfs_iop_rmdir(struct inode *dir, struct dentry *dentry) 903 { 904 struct kernfs_node *kn = dentry->d_fsdata; 905 struct kernfs_syscall_ops *scops = kernfs_root(kn)->syscall_ops; 906 int ret; 907 908 if (!scops || !scops->rmdir) 909 return -EPERM; 910 911 if (!kernfs_get_active(kn)) 912 return -ENODEV; 913 914 ret = scops->rmdir(kn); 915 916 kernfs_put_active(kn); 917 return ret; 918 } 919 920 static int kernfs_iop_rename(struct inode *old_dir, struct dentry *old_dentry, 921 struct inode *new_dir, struct dentry *new_dentry) 922 { 923 struct kernfs_node *kn = old_dentry->d_fsdata; 924 struct kernfs_node *new_parent = new_dir->i_private; 925 struct kernfs_syscall_ops *scops = kernfs_root(kn)->syscall_ops; 926 int ret; 927 928 if (!scops || !scops->rename) 929 return -EPERM; 930 931 if (!kernfs_get_active(kn)) 932 return -ENODEV; 933 934 if (!kernfs_get_active(new_parent)) { 935 kernfs_put_active(kn); 936 return -ENODEV; 937 } 938 939 ret = scops->rename(kn, new_parent, new_dentry->d_name.name); 940 941 kernfs_put_active(new_parent); 942 kernfs_put_active(kn); 943 return ret; 944 } 945 946 const struct inode_operations kernfs_dir_iops = { 947 .lookup = kernfs_iop_lookup, 948 .permission = kernfs_iop_permission, 949 .setattr = kernfs_iop_setattr, 950 .getattr = kernfs_iop_getattr, 951 .setxattr = kernfs_iop_setxattr, 952 .removexattr = kernfs_iop_removexattr, 953 .getxattr = kernfs_iop_getxattr, 954 .listxattr = kernfs_iop_listxattr, 955 956 .mkdir = kernfs_iop_mkdir, 957 .rmdir = kernfs_iop_rmdir, 958 .rename = kernfs_iop_rename, 959 }; 960 961 static struct kernfs_node *kernfs_leftmost_descendant(struct kernfs_node *pos) 962 { 963 struct kernfs_node *last; 964 965 while (true) { 966 struct rb_node *rbn; 967 968 last = pos; 969 970 if (kernfs_type(pos) != KERNFS_DIR) 971 break; 972 973 rbn = rb_first(&pos->dir.children); 974 if (!rbn) 975 break; 976 977 pos = rb_to_kn(rbn); 978 } 979 980 return last; 981 } 982 983 /** 984 * kernfs_next_descendant_post - find the next descendant for post-order walk 985 * @pos: the current position (%NULL to initiate traversal) 986 * @root: kernfs_node whose descendants to walk 987 * 988 * Find the next descendant to visit for post-order traversal of @root's 989 * descendants. @root is included in the iteration and the last node to be 990 * visited. 991 */ 992 static struct kernfs_node *kernfs_next_descendant_post(struct kernfs_node *pos, 993 struct kernfs_node *root) 994 { 995 struct rb_node *rbn; 996 997 lockdep_assert_held(&kernfs_mutex); 998 999 /* if first iteration, visit leftmost descendant which may be root */ 1000 if (!pos) 1001 return kernfs_leftmost_descendant(root); 1002 1003 /* if we visited @root, we're done */ 1004 if (pos == root) 1005 return NULL; 1006 1007 /* if there's an unvisited sibling, visit its leftmost descendant */ 1008 rbn = rb_next(&pos->rb); 1009 if (rbn) 1010 return kernfs_leftmost_descendant(rb_to_kn(rbn)); 1011 1012 /* no sibling left, visit parent */ 1013 return pos->parent; 1014 } 1015 1016 /** 1017 * kernfs_activate - activate a node which started deactivated 1018 * @kn: kernfs_node whose subtree is to be activated 1019 * 1020 * If the root has KERNFS_ROOT_CREATE_DEACTIVATED set, a newly created node 1021 * needs to be explicitly activated. A node which hasn't been activated 1022 * isn't visible to userland and deactivation is skipped during its 1023 * removal. This is useful to construct atomic init sequences where 1024 * creation of multiple nodes should either succeed or fail atomically. 1025 * 1026 * The caller is responsible for ensuring that this function is not called 1027 * after kernfs_remove*() is invoked on @kn. 1028 */ 1029 void kernfs_activate(struct kernfs_node *kn) 1030 { 1031 struct kernfs_node *pos; 1032 1033 mutex_lock(&kernfs_mutex); 1034 1035 pos = NULL; 1036 while ((pos = kernfs_next_descendant_post(pos, kn))) { 1037 if (!pos || (pos->flags & KERNFS_ACTIVATED)) 1038 continue; 1039 1040 WARN_ON_ONCE(pos->parent && RB_EMPTY_NODE(&pos->rb)); 1041 WARN_ON_ONCE(atomic_read(&pos->active) != KN_DEACTIVATED_BIAS); 1042 1043 atomic_sub(KN_DEACTIVATED_BIAS, &pos->active); 1044 pos->flags |= KERNFS_ACTIVATED; 1045 } 1046 1047 mutex_unlock(&kernfs_mutex); 1048 } 1049 1050 static void __kernfs_remove(struct kernfs_node *kn) 1051 { 1052 struct kernfs_node *pos; 1053 1054 lockdep_assert_held(&kernfs_mutex); 1055 1056 /* 1057 * Short-circuit if non-root @kn has already finished removal. 1058 * This is for kernfs_remove_self() which plays with active ref 1059 * after removal. 1060 */ 1061 if (!kn || (kn->parent && RB_EMPTY_NODE(&kn->rb))) 1062 return; 1063 1064 pr_debug("kernfs %s: removing\n", kn->name); 1065 1066 /* prevent any new usage under @kn by deactivating all nodes */ 1067 pos = NULL; 1068 while ((pos = kernfs_next_descendant_post(pos, kn))) 1069 if (kernfs_active(pos)) 1070 atomic_add(KN_DEACTIVATED_BIAS, &pos->active); 1071 1072 /* deactivate and unlink the subtree node-by-node */ 1073 do { 1074 pos = kernfs_leftmost_descendant(kn); 1075 1076 /* 1077 * kernfs_drain() drops kernfs_mutex temporarily and @pos's 1078 * base ref could have been put by someone else by the time 1079 * the function returns. Make sure it doesn't go away 1080 * underneath us. 1081 */ 1082 kernfs_get(pos); 1083 1084 /* 1085 * Drain iff @kn was activated. This avoids draining and 1086 * its lockdep annotations for nodes which have never been 1087 * activated and allows embedding kernfs_remove() in create 1088 * error paths without worrying about draining. 1089 */ 1090 if (kn->flags & KERNFS_ACTIVATED) 1091 kernfs_drain(pos); 1092 else 1093 WARN_ON_ONCE(atomic_read(&kn->active) != KN_DEACTIVATED_BIAS); 1094 1095 /* 1096 * kernfs_unlink_sibling() succeeds once per node. Use it 1097 * to decide who's responsible for cleanups. 1098 */ 1099 if (!pos->parent || kernfs_unlink_sibling(pos)) { 1100 struct kernfs_iattrs *ps_iattr = 1101 pos->parent ? pos->parent->iattr : NULL; 1102 1103 /* update timestamps on the parent */ 1104 if (ps_iattr) { 1105 ps_iattr->ia_iattr.ia_ctime = CURRENT_TIME; 1106 ps_iattr->ia_iattr.ia_mtime = CURRENT_TIME; 1107 } 1108 1109 kernfs_put(pos); 1110 } 1111 1112 kernfs_put(pos); 1113 } while (pos != kn); 1114 } 1115 1116 /** 1117 * kernfs_remove - remove a kernfs_node recursively 1118 * @kn: the kernfs_node to remove 1119 * 1120 * Remove @kn along with all its subdirectories and files. 1121 */ 1122 void kernfs_remove(struct kernfs_node *kn) 1123 { 1124 mutex_lock(&kernfs_mutex); 1125 __kernfs_remove(kn); 1126 mutex_unlock(&kernfs_mutex); 1127 } 1128 1129 /** 1130 * kernfs_break_active_protection - break out of active protection 1131 * @kn: the self kernfs_node 1132 * 1133 * The caller must be running off of a kernfs operation which is invoked 1134 * with an active reference - e.g. one of kernfs_ops. Each invocation of 1135 * this function must also be matched with an invocation of 1136 * kernfs_unbreak_active_protection(). 1137 * 1138 * This function releases the active reference of @kn the caller is 1139 * holding. Once this function is called, @kn may be removed at any point 1140 * and the caller is solely responsible for ensuring that the objects it 1141 * dereferences are accessible. 1142 */ 1143 void kernfs_break_active_protection(struct kernfs_node *kn) 1144 { 1145 /* 1146 * Take out ourself out of the active ref dependency chain. If 1147 * we're called without an active ref, lockdep will complain. 1148 */ 1149 kernfs_put_active(kn); 1150 } 1151 1152 /** 1153 * kernfs_unbreak_active_protection - undo kernfs_break_active_protection() 1154 * @kn: the self kernfs_node 1155 * 1156 * If kernfs_break_active_protection() was called, this function must be 1157 * invoked before finishing the kernfs operation. Note that while this 1158 * function restores the active reference, it doesn't and can't actually 1159 * restore the active protection - @kn may already or be in the process of 1160 * being removed. Once kernfs_break_active_protection() is invoked, that 1161 * protection is irreversibly gone for the kernfs operation instance. 1162 * 1163 * While this function may be called at any point after 1164 * kernfs_break_active_protection() is invoked, its most useful location 1165 * would be right before the enclosing kernfs operation returns. 1166 */ 1167 void kernfs_unbreak_active_protection(struct kernfs_node *kn) 1168 { 1169 /* 1170 * @kn->active could be in any state; however, the increment we do 1171 * here will be undone as soon as the enclosing kernfs operation 1172 * finishes and this temporary bump can't break anything. If @kn 1173 * is alive, nothing changes. If @kn is being deactivated, the 1174 * soon-to-follow put will either finish deactivation or restore 1175 * deactivated state. If @kn is already removed, the temporary 1176 * bump is guaranteed to be gone before @kn is released. 1177 */ 1178 atomic_inc(&kn->active); 1179 if (kernfs_lockdep(kn)) 1180 rwsem_acquire(&kn->dep_map, 0, 1, _RET_IP_); 1181 } 1182 1183 /** 1184 * kernfs_remove_self - remove a kernfs_node from its own method 1185 * @kn: the self kernfs_node to remove 1186 * 1187 * The caller must be running off of a kernfs operation which is invoked 1188 * with an active reference - e.g. one of kernfs_ops. This can be used to 1189 * implement a file operation which deletes itself. 1190 * 1191 * For example, the "delete" file for a sysfs device directory can be 1192 * implemented by invoking kernfs_remove_self() on the "delete" file 1193 * itself. This function breaks the circular dependency of trying to 1194 * deactivate self while holding an active ref itself. It isn't necessary 1195 * to modify the usual removal path to use kernfs_remove_self(). The 1196 * "delete" implementation can simply invoke kernfs_remove_self() on self 1197 * before proceeding with the usual removal path. kernfs will ignore later 1198 * kernfs_remove() on self. 1199 * 1200 * kernfs_remove_self() can be called multiple times concurrently on the 1201 * same kernfs_node. Only the first one actually performs removal and 1202 * returns %true. All others will wait until the kernfs operation which 1203 * won self-removal finishes and return %false. Note that the losers wait 1204 * for the completion of not only the winning kernfs_remove_self() but also 1205 * the whole kernfs_ops which won the arbitration. This can be used to 1206 * guarantee, for example, all concurrent writes to a "delete" file to 1207 * finish only after the whole operation is complete. 1208 */ 1209 bool kernfs_remove_self(struct kernfs_node *kn) 1210 { 1211 bool ret; 1212 1213 mutex_lock(&kernfs_mutex); 1214 kernfs_break_active_protection(kn); 1215 1216 /* 1217 * SUICIDAL is used to arbitrate among competing invocations. Only 1218 * the first one will actually perform removal. When the removal 1219 * is complete, SUICIDED is set and the active ref is restored 1220 * while holding kernfs_mutex. The ones which lost arbitration 1221 * waits for SUICDED && drained which can happen only after the 1222 * enclosing kernfs operation which executed the winning instance 1223 * of kernfs_remove_self() finished. 1224 */ 1225 if (!(kn->flags & KERNFS_SUICIDAL)) { 1226 kn->flags |= KERNFS_SUICIDAL; 1227 __kernfs_remove(kn); 1228 kn->flags |= KERNFS_SUICIDED; 1229 ret = true; 1230 } else { 1231 wait_queue_head_t *waitq = &kernfs_root(kn)->deactivate_waitq; 1232 DEFINE_WAIT(wait); 1233 1234 while (true) { 1235 prepare_to_wait(waitq, &wait, TASK_UNINTERRUPTIBLE); 1236 1237 if ((kn->flags & KERNFS_SUICIDED) && 1238 atomic_read(&kn->active) == KN_DEACTIVATED_BIAS) 1239 break; 1240 1241 mutex_unlock(&kernfs_mutex); 1242 schedule(); 1243 mutex_lock(&kernfs_mutex); 1244 } 1245 finish_wait(waitq, &wait); 1246 WARN_ON_ONCE(!RB_EMPTY_NODE(&kn->rb)); 1247 ret = false; 1248 } 1249 1250 /* 1251 * This must be done while holding kernfs_mutex; otherwise, waiting 1252 * for SUICIDED && deactivated could finish prematurely. 1253 */ 1254 kernfs_unbreak_active_protection(kn); 1255 1256 mutex_unlock(&kernfs_mutex); 1257 return ret; 1258 } 1259 1260 /** 1261 * kernfs_remove_by_name_ns - find a kernfs_node by name and remove it 1262 * @parent: parent of the target 1263 * @name: name of the kernfs_node to remove 1264 * @ns: namespace tag of the kernfs_node to remove 1265 * 1266 * Look for the kernfs_node with @name and @ns under @parent and remove it. 1267 * Returns 0 on success, -ENOENT if such entry doesn't exist. 1268 */ 1269 int kernfs_remove_by_name_ns(struct kernfs_node *parent, const char *name, 1270 const void *ns) 1271 { 1272 struct kernfs_node *kn; 1273 1274 if (!parent) { 1275 WARN(1, KERN_WARNING "kernfs: can not remove '%s', no directory\n", 1276 name); 1277 return -ENOENT; 1278 } 1279 1280 mutex_lock(&kernfs_mutex); 1281 1282 kn = kernfs_find_ns(parent, name, ns); 1283 if (kn) 1284 __kernfs_remove(kn); 1285 1286 mutex_unlock(&kernfs_mutex); 1287 1288 if (kn) 1289 return 0; 1290 else 1291 return -ENOENT; 1292 } 1293 1294 /** 1295 * kernfs_rename_ns - move and rename a kernfs_node 1296 * @kn: target node 1297 * @new_parent: new parent to put @sd under 1298 * @new_name: new name 1299 * @new_ns: new namespace tag 1300 */ 1301 int kernfs_rename_ns(struct kernfs_node *kn, struct kernfs_node *new_parent, 1302 const char *new_name, const void *new_ns) 1303 { 1304 struct kernfs_node *old_parent; 1305 const char *old_name = NULL; 1306 int error; 1307 1308 /* can't move or rename root */ 1309 if (!kn->parent) 1310 return -EINVAL; 1311 1312 mutex_lock(&kernfs_mutex); 1313 1314 error = -ENOENT; 1315 if (!kernfs_active(kn) || !kernfs_active(new_parent) || 1316 (new_parent->flags & KERNFS_EMPTY_DIR)) 1317 goto out; 1318 1319 error = 0; 1320 if ((kn->parent == new_parent) && (kn->ns == new_ns) && 1321 (strcmp(kn->name, new_name) == 0)) 1322 goto out; /* nothing to rename */ 1323 1324 error = -EEXIST; 1325 if (kernfs_find_ns(new_parent, new_name, new_ns)) 1326 goto out; 1327 1328 /* rename kernfs_node */ 1329 if (strcmp(kn->name, new_name) != 0) { 1330 error = -ENOMEM; 1331 new_name = kstrdup_const(new_name, GFP_KERNEL); 1332 if (!new_name) 1333 goto out; 1334 } else { 1335 new_name = NULL; 1336 } 1337 1338 /* 1339 * Move to the appropriate place in the appropriate directories rbtree. 1340 */ 1341 kernfs_unlink_sibling(kn); 1342 kernfs_get(new_parent); 1343 1344 /* rename_lock protects ->parent and ->name accessors */ 1345 spin_lock_irq(&kernfs_rename_lock); 1346 1347 old_parent = kn->parent; 1348 kn->parent = new_parent; 1349 1350 kn->ns = new_ns; 1351 if (new_name) { 1352 old_name = kn->name; 1353 kn->name = new_name; 1354 } 1355 1356 spin_unlock_irq(&kernfs_rename_lock); 1357 1358 kn->hash = kernfs_name_hash(kn->name, kn->ns); 1359 kernfs_link_sibling(kn); 1360 1361 kernfs_put(old_parent); 1362 kfree_const(old_name); 1363 1364 error = 0; 1365 out: 1366 mutex_unlock(&kernfs_mutex); 1367 return error; 1368 } 1369 1370 /* Relationship between s_mode and the DT_xxx types */ 1371 static inline unsigned char dt_type(struct kernfs_node *kn) 1372 { 1373 return (kn->mode >> 12) & 15; 1374 } 1375 1376 static int kernfs_dir_fop_release(struct inode *inode, struct file *filp) 1377 { 1378 kernfs_put(filp->private_data); 1379 return 0; 1380 } 1381 1382 static struct kernfs_node *kernfs_dir_pos(const void *ns, 1383 struct kernfs_node *parent, loff_t hash, struct kernfs_node *pos) 1384 { 1385 if (pos) { 1386 int valid = kernfs_active(pos) && 1387 pos->parent == parent && hash == pos->hash; 1388 kernfs_put(pos); 1389 if (!valid) 1390 pos = NULL; 1391 } 1392 if (!pos && (hash > 1) && (hash < INT_MAX)) { 1393 struct rb_node *node = parent->dir.children.rb_node; 1394 while (node) { 1395 pos = rb_to_kn(node); 1396 1397 if (hash < pos->hash) 1398 node = node->rb_left; 1399 else if (hash > pos->hash) 1400 node = node->rb_right; 1401 else 1402 break; 1403 } 1404 } 1405 /* Skip over entries which are dying/dead or in the wrong namespace */ 1406 while (pos && (!kernfs_active(pos) || pos->ns != ns)) { 1407 struct rb_node *node = rb_next(&pos->rb); 1408 if (!node) 1409 pos = NULL; 1410 else 1411 pos = rb_to_kn(node); 1412 } 1413 return pos; 1414 } 1415 1416 static struct kernfs_node *kernfs_dir_next_pos(const void *ns, 1417 struct kernfs_node *parent, ino_t ino, struct kernfs_node *pos) 1418 { 1419 pos = kernfs_dir_pos(ns, parent, ino, pos); 1420 if (pos) { 1421 do { 1422 struct rb_node *node = rb_next(&pos->rb); 1423 if (!node) 1424 pos = NULL; 1425 else 1426 pos = rb_to_kn(node); 1427 } while (pos && (!kernfs_active(pos) || pos->ns != ns)); 1428 } 1429 return pos; 1430 } 1431 1432 static int kernfs_fop_readdir(struct file *file, struct dir_context *ctx) 1433 { 1434 struct dentry *dentry = file->f_path.dentry; 1435 struct kernfs_node *parent = dentry->d_fsdata; 1436 struct kernfs_node *pos = file->private_data; 1437 const void *ns = NULL; 1438 1439 if (!dir_emit_dots(file, ctx)) 1440 return 0; 1441 mutex_lock(&kernfs_mutex); 1442 1443 if (kernfs_ns_enabled(parent)) 1444 ns = kernfs_info(dentry->d_sb)->ns; 1445 1446 for (pos = kernfs_dir_pos(ns, parent, ctx->pos, pos); 1447 pos; 1448 pos = kernfs_dir_next_pos(ns, parent, ctx->pos, pos)) { 1449 const char *name = pos->name; 1450 unsigned int type = dt_type(pos); 1451 int len = strlen(name); 1452 ino_t ino = pos->ino; 1453 1454 ctx->pos = pos->hash; 1455 file->private_data = pos; 1456 kernfs_get(pos); 1457 1458 mutex_unlock(&kernfs_mutex); 1459 if (!dir_emit(ctx, name, len, ino, type)) 1460 return 0; 1461 mutex_lock(&kernfs_mutex); 1462 } 1463 mutex_unlock(&kernfs_mutex); 1464 file->private_data = NULL; 1465 ctx->pos = INT_MAX; 1466 return 0; 1467 } 1468 1469 static loff_t kernfs_dir_fop_llseek(struct file *file, loff_t offset, 1470 int whence) 1471 { 1472 struct inode *inode = file_inode(file); 1473 loff_t ret; 1474 1475 mutex_lock(&inode->i_mutex); 1476 ret = generic_file_llseek(file, offset, whence); 1477 mutex_unlock(&inode->i_mutex); 1478 1479 return ret; 1480 } 1481 1482 const struct file_operations kernfs_dir_fops = { 1483 .read = generic_read_dir, 1484 .iterate = kernfs_fop_readdir, 1485 .release = kernfs_dir_fop_release, 1486 .llseek = kernfs_dir_fop_llseek, 1487 }; 1488