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 ret = ida_simple_get(&root->ino_ida, 1, 0, GFP_KERNEL); 545 if (ret < 0) 546 goto err_out2; 547 kn->ino = ret; 548 549 atomic_set(&kn->count, 1); 550 atomic_set(&kn->active, KN_DEACTIVATED_BIAS); 551 RB_CLEAR_NODE(&kn->rb); 552 553 kn->name = name; 554 kn->mode = mode; 555 kn->flags = flags; 556 557 return kn; 558 559 err_out2: 560 kmem_cache_free(kernfs_node_cache, kn); 561 err_out1: 562 kfree_const(name); 563 return NULL; 564 } 565 566 struct kernfs_node *kernfs_new_node(struct kernfs_node *parent, 567 const char *name, umode_t mode, 568 unsigned flags) 569 { 570 struct kernfs_node *kn; 571 572 kn = __kernfs_new_node(kernfs_root(parent), name, mode, flags); 573 if (kn) { 574 kernfs_get(parent); 575 kn->parent = parent; 576 } 577 return kn; 578 } 579 580 /** 581 * kernfs_add_one - add kernfs_node to parent without warning 582 * @kn: kernfs_node to be added 583 * 584 * The caller must already have initialized @kn->parent. This 585 * function increments nlink of the parent's inode if @kn is a 586 * directory and link into the children list of the parent. 587 * 588 * RETURNS: 589 * 0 on success, -EEXIST if entry with the given name already 590 * exists. 591 */ 592 int kernfs_add_one(struct kernfs_node *kn) 593 { 594 struct kernfs_node *parent = kn->parent; 595 struct kernfs_iattrs *ps_iattr; 596 bool has_ns; 597 int ret; 598 599 mutex_lock(&kernfs_mutex); 600 601 ret = -EINVAL; 602 has_ns = kernfs_ns_enabled(parent); 603 if (WARN(has_ns != (bool)kn->ns, KERN_WARNING "kernfs: ns %s in '%s' for '%s'\n", 604 has_ns ? "required" : "invalid", parent->name, kn->name)) 605 goto out_unlock; 606 607 if (kernfs_type(parent) != KERNFS_DIR) 608 goto out_unlock; 609 610 ret = -ENOENT; 611 if (parent->flags & KERNFS_EMPTY_DIR) 612 goto out_unlock; 613 614 if ((parent->flags & KERNFS_ACTIVATED) && !kernfs_active(parent)) 615 goto out_unlock; 616 617 kn->hash = kernfs_name_hash(kn->name, kn->ns); 618 619 ret = kernfs_link_sibling(kn); 620 if (ret) 621 goto out_unlock; 622 623 /* Update timestamps on the parent */ 624 ps_iattr = parent->iattr; 625 if (ps_iattr) { 626 struct iattr *ps_iattrs = &ps_iattr->ia_iattr; 627 ps_iattrs->ia_ctime = ps_iattrs->ia_mtime = CURRENT_TIME; 628 } 629 630 mutex_unlock(&kernfs_mutex); 631 632 /* 633 * Activate the new node unless CREATE_DEACTIVATED is requested. 634 * If not activated here, the kernfs user is responsible for 635 * activating the node with kernfs_activate(). A node which hasn't 636 * been activated is not visible to userland and its removal won't 637 * trigger deactivation. 638 */ 639 if (!(kernfs_root(kn)->flags & KERNFS_ROOT_CREATE_DEACTIVATED)) 640 kernfs_activate(kn); 641 return 0; 642 643 out_unlock: 644 mutex_unlock(&kernfs_mutex); 645 return ret; 646 } 647 648 /** 649 * kernfs_find_ns - find kernfs_node with the given name 650 * @parent: kernfs_node to search under 651 * @name: name to look for 652 * @ns: the namespace tag to use 653 * 654 * Look for kernfs_node with name @name under @parent. Returns pointer to 655 * the found kernfs_node on success, %NULL on failure. 656 */ 657 static struct kernfs_node *kernfs_find_ns(struct kernfs_node *parent, 658 const unsigned char *name, 659 const void *ns) 660 { 661 struct rb_node *node = parent->dir.children.rb_node; 662 bool has_ns = kernfs_ns_enabled(parent); 663 unsigned int hash; 664 665 lockdep_assert_held(&kernfs_mutex); 666 667 if (has_ns != (bool)ns) { 668 WARN(1, KERN_WARNING "kernfs: ns %s in '%s' for '%s'\n", 669 has_ns ? "required" : "invalid", parent->name, name); 670 return NULL; 671 } 672 673 hash = kernfs_name_hash(name, ns); 674 while (node) { 675 struct kernfs_node *kn; 676 int result; 677 678 kn = rb_to_kn(node); 679 result = kernfs_name_compare(hash, name, ns, kn); 680 if (result < 0) 681 node = node->rb_left; 682 else if (result > 0) 683 node = node->rb_right; 684 else 685 return kn; 686 } 687 return NULL; 688 } 689 690 static struct kernfs_node *kernfs_walk_ns(struct kernfs_node *parent, 691 const unsigned char *path, 692 const void *ns) 693 { 694 size_t len; 695 char *p, *name; 696 697 lockdep_assert_held(&kernfs_mutex); 698 699 /* grab kernfs_rename_lock to piggy back on kernfs_pr_cont_buf */ 700 spin_lock_irq(&kernfs_rename_lock); 701 702 len = strlcpy(kernfs_pr_cont_buf, path, sizeof(kernfs_pr_cont_buf)); 703 704 if (len >= sizeof(kernfs_pr_cont_buf)) { 705 spin_unlock_irq(&kernfs_rename_lock); 706 return NULL; 707 } 708 709 p = kernfs_pr_cont_buf; 710 711 while ((name = strsep(&p, "/")) && parent) { 712 if (*name == '\0') 713 continue; 714 parent = kernfs_find_ns(parent, name, ns); 715 } 716 717 spin_unlock_irq(&kernfs_rename_lock); 718 719 return parent; 720 } 721 722 /** 723 * kernfs_find_and_get_ns - find and get kernfs_node with the given name 724 * @parent: kernfs_node to search under 725 * @name: name to look for 726 * @ns: the namespace tag to use 727 * 728 * Look for kernfs_node with name @name under @parent and get a reference 729 * if found. This function may sleep and returns pointer to the found 730 * kernfs_node on success, %NULL on failure. 731 */ 732 struct kernfs_node *kernfs_find_and_get_ns(struct kernfs_node *parent, 733 const char *name, const void *ns) 734 { 735 struct kernfs_node *kn; 736 737 mutex_lock(&kernfs_mutex); 738 kn = kernfs_find_ns(parent, name, ns); 739 kernfs_get(kn); 740 mutex_unlock(&kernfs_mutex); 741 742 return kn; 743 } 744 EXPORT_SYMBOL_GPL(kernfs_find_and_get_ns); 745 746 /** 747 * kernfs_walk_and_get_ns - find and get kernfs_node with the given path 748 * @parent: kernfs_node to search under 749 * @path: path to look for 750 * @ns: the namespace tag to use 751 * 752 * Look for kernfs_node with path @path under @parent and get a reference 753 * if found. This function may sleep and returns pointer to the found 754 * kernfs_node on success, %NULL on failure. 755 */ 756 struct kernfs_node *kernfs_walk_and_get_ns(struct kernfs_node *parent, 757 const char *path, const void *ns) 758 { 759 struct kernfs_node *kn; 760 761 mutex_lock(&kernfs_mutex); 762 kn = kernfs_walk_ns(parent, path, ns); 763 kernfs_get(kn); 764 mutex_unlock(&kernfs_mutex); 765 766 return kn; 767 } 768 769 /** 770 * kernfs_create_root - create a new kernfs hierarchy 771 * @scops: optional syscall operations for the hierarchy 772 * @flags: KERNFS_ROOT_* flags 773 * @priv: opaque data associated with the new directory 774 * 775 * Returns the root of the new hierarchy on success, ERR_PTR() value on 776 * failure. 777 */ 778 struct kernfs_root *kernfs_create_root(struct kernfs_syscall_ops *scops, 779 unsigned int flags, void *priv) 780 { 781 struct kernfs_root *root; 782 struct kernfs_node *kn; 783 784 root = kzalloc(sizeof(*root), GFP_KERNEL); 785 if (!root) 786 return ERR_PTR(-ENOMEM); 787 788 ida_init(&root->ino_ida); 789 INIT_LIST_HEAD(&root->supers); 790 791 kn = __kernfs_new_node(root, "", S_IFDIR | S_IRUGO | S_IXUGO, 792 KERNFS_DIR); 793 if (!kn) { 794 ida_destroy(&root->ino_ida); 795 kfree(root); 796 return ERR_PTR(-ENOMEM); 797 } 798 799 kn->priv = priv; 800 kn->dir.root = root; 801 802 root->syscall_ops = scops; 803 root->flags = flags; 804 root->kn = kn; 805 init_waitqueue_head(&root->deactivate_waitq); 806 807 if (!(root->flags & KERNFS_ROOT_CREATE_DEACTIVATED)) 808 kernfs_activate(kn); 809 810 return root; 811 } 812 813 /** 814 * kernfs_destroy_root - destroy a kernfs hierarchy 815 * @root: root of the hierarchy to destroy 816 * 817 * Destroy the hierarchy anchored at @root by removing all existing 818 * directories and destroying @root. 819 */ 820 void kernfs_destroy_root(struct kernfs_root *root) 821 { 822 kernfs_remove(root->kn); /* will also free @root */ 823 } 824 825 /** 826 * kernfs_create_dir_ns - create a directory 827 * @parent: parent in which to create a new directory 828 * @name: name of the new directory 829 * @mode: mode of the new directory 830 * @priv: opaque data associated with the new directory 831 * @ns: optional namespace tag of the directory 832 * 833 * Returns the created node on success, ERR_PTR() value on failure. 834 */ 835 struct kernfs_node *kernfs_create_dir_ns(struct kernfs_node *parent, 836 const char *name, umode_t mode, 837 void *priv, const void *ns) 838 { 839 struct kernfs_node *kn; 840 int rc; 841 842 /* allocate */ 843 kn = kernfs_new_node(parent, name, mode | S_IFDIR, KERNFS_DIR); 844 if (!kn) 845 return ERR_PTR(-ENOMEM); 846 847 kn->dir.root = parent->dir.root; 848 kn->ns = ns; 849 kn->priv = priv; 850 851 /* link in */ 852 rc = kernfs_add_one(kn); 853 if (!rc) 854 return kn; 855 856 kernfs_put(kn); 857 return ERR_PTR(rc); 858 } 859 860 /** 861 * kernfs_create_empty_dir - create an always empty directory 862 * @parent: parent in which to create a new directory 863 * @name: name of the new directory 864 * 865 * Returns the created node on success, ERR_PTR() value on failure. 866 */ 867 struct kernfs_node *kernfs_create_empty_dir(struct kernfs_node *parent, 868 const char *name) 869 { 870 struct kernfs_node *kn; 871 int rc; 872 873 /* allocate */ 874 kn = kernfs_new_node(parent, name, S_IRUGO|S_IXUGO|S_IFDIR, KERNFS_DIR); 875 if (!kn) 876 return ERR_PTR(-ENOMEM); 877 878 kn->flags |= KERNFS_EMPTY_DIR; 879 kn->dir.root = parent->dir.root; 880 kn->ns = NULL; 881 kn->priv = NULL; 882 883 /* link in */ 884 rc = kernfs_add_one(kn); 885 if (!rc) 886 return kn; 887 888 kernfs_put(kn); 889 return ERR_PTR(rc); 890 } 891 892 static struct dentry *kernfs_iop_lookup(struct inode *dir, 893 struct dentry *dentry, 894 unsigned int flags) 895 { 896 struct dentry *ret; 897 struct kernfs_node *parent = dentry->d_parent->d_fsdata; 898 struct kernfs_node *kn; 899 struct inode *inode; 900 const void *ns = NULL; 901 902 mutex_lock(&kernfs_mutex); 903 904 if (kernfs_ns_enabled(parent)) 905 ns = kernfs_info(dir->i_sb)->ns; 906 907 kn = kernfs_find_ns(parent, dentry->d_name.name, ns); 908 909 /* no such entry */ 910 if (!kn || !kernfs_active(kn)) { 911 ret = NULL; 912 goto out_unlock; 913 } 914 kernfs_get(kn); 915 dentry->d_fsdata = kn; 916 917 /* attach dentry and inode */ 918 inode = kernfs_get_inode(dir->i_sb, kn); 919 if (!inode) { 920 ret = ERR_PTR(-ENOMEM); 921 goto out_unlock; 922 } 923 924 /* instantiate and hash dentry */ 925 ret = d_splice_alias(inode, dentry); 926 out_unlock: 927 mutex_unlock(&kernfs_mutex); 928 return ret; 929 } 930 931 static int kernfs_iop_mkdir(struct inode *dir, struct dentry *dentry, 932 umode_t mode) 933 { 934 struct kernfs_node *parent = dir->i_private; 935 struct kernfs_syscall_ops *scops = kernfs_root(parent)->syscall_ops; 936 int ret; 937 938 if (!scops || !scops->mkdir) 939 return -EPERM; 940 941 if (!kernfs_get_active(parent)) 942 return -ENODEV; 943 944 ret = scops->mkdir(parent, dentry->d_name.name, mode); 945 946 kernfs_put_active(parent); 947 return ret; 948 } 949 950 static int kernfs_iop_rmdir(struct inode *dir, struct dentry *dentry) 951 { 952 struct kernfs_node *kn = dentry->d_fsdata; 953 struct kernfs_syscall_ops *scops = kernfs_root(kn)->syscall_ops; 954 int ret; 955 956 if (!scops || !scops->rmdir) 957 return -EPERM; 958 959 if (!kernfs_get_active(kn)) 960 return -ENODEV; 961 962 ret = scops->rmdir(kn); 963 964 kernfs_put_active(kn); 965 return ret; 966 } 967 968 static int kernfs_iop_rename(struct inode *old_dir, struct dentry *old_dentry, 969 struct inode *new_dir, struct dentry *new_dentry) 970 { 971 struct kernfs_node *kn = old_dentry->d_fsdata; 972 struct kernfs_node *new_parent = new_dir->i_private; 973 struct kernfs_syscall_ops *scops = kernfs_root(kn)->syscall_ops; 974 int ret; 975 976 if (!scops || !scops->rename) 977 return -EPERM; 978 979 if (!kernfs_get_active(kn)) 980 return -ENODEV; 981 982 if (!kernfs_get_active(new_parent)) { 983 kernfs_put_active(kn); 984 return -ENODEV; 985 } 986 987 ret = scops->rename(kn, new_parent, new_dentry->d_name.name); 988 989 kernfs_put_active(new_parent); 990 kernfs_put_active(kn); 991 return ret; 992 } 993 994 const struct inode_operations kernfs_dir_iops = { 995 .lookup = kernfs_iop_lookup, 996 .permission = kernfs_iop_permission, 997 .setattr = kernfs_iop_setattr, 998 .getattr = kernfs_iop_getattr, 999 .setxattr = kernfs_iop_setxattr, 1000 .removexattr = kernfs_iop_removexattr, 1001 .getxattr = kernfs_iop_getxattr, 1002 .listxattr = kernfs_iop_listxattr, 1003 1004 .mkdir = kernfs_iop_mkdir, 1005 .rmdir = kernfs_iop_rmdir, 1006 .rename = kernfs_iop_rename, 1007 }; 1008 1009 static struct kernfs_node *kernfs_leftmost_descendant(struct kernfs_node *pos) 1010 { 1011 struct kernfs_node *last; 1012 1013 while (true) { 1014 struct rb_node *rbn; 1015 1016 last = pos; 1017 1018 if (kernfs_type(pos) != KERNFS_DIR) 1019 break; 1020 1021 rbn = rb_first(&pos->dir.children); 1022 if (!rbn) 1023 break; 1024 1025 pos = rb_to_kn(rbn); 1026 } 1027 1028 return last; 1029 } 1030 1031 /** 1032 * kernfs_next_descendant_post - find the next descendant for post-order walk 1033 * @pos: the current position (%NULL to initiate traversal) 1034 * @root: kernfs_node whose descendants to walk 1035 * 1036 * Find the next descendant to visit for post-order traversal of @root's 1037 * descendants. @root is included in the iteration and the last node to be 1038 * visited. 1039 */ 1040 static struct kernfs_node *kernfs_next_descendant_post(struct kernfs_node *pos, 1041 struct kernfs_node *root) 1042 { 1043 struct rb_node *rbn; 1044 1045 lockdep_assert_held(&kernfs_mutex); 1046 1047 /* if first iteration, visit leftmost descendant which may be root */ 1048 if (!pos) 1049 return kernfs_leftmost_descendant(root); 1050 1051 /* if we visited @root, we're done */ 1052 if (pos == root) 1053 return NULL; 1054 1055 /* if there's an unvisited sibling, visit its leftmost descendant */ 1056 rbn = rb_next(&pos->rb); 1057 if (rbn) 1058 return kernfs_leftmost_descendant(rb_to_kn(rbn)); 1059 1060 /* no sibling left, visit parent */ 1061 return pos->parent; 1062 } 1063 1064 /** 1065 * kernfs_activate - activate a node which started deactivated 1066 * @kn: kernfs_node whose subtree is to be activated 1067 * 1068 * If the root has KERNFS_ROOT_CREATE_DEACTIVATED set, a newly created node 1069 * needs to be explicitly activated. A node which hasn't been activated 1070 * isn't visible to userland and deactivation is skipped during its 1071 * removal. This is useful to construct atomic init sequences where 1072 * creation of multiple nodes should either succeed or fail atomically. 1073 * 1074 * The caller is responsible for ensuring that this function is not called 1075 * after kernfs_remove*() is invoked on @kn. 1076 */ 1077 void kernfs_activate(struct kernfs_node *kn) 1078 { 1079 struct kernfs_node *pos; 1080 1081 mutex_lock(&kernfs_mutex); 1082 1083 pos = NULL; 1084 while ((pos = kernfs_next_descendant_post(pos, kn))) { 1085 if (!pos || (pos->flags & KERNFS_ACTIVATED)) 1086 continue; 1087 1088 WARN_ON_ONCE(pos->parent && RB_EMPTY_NODE(&pos->rb)); 1089 WARN_ON_ONCE(atomic_read(&pos->active) != KN_DEACTIVATED_BIAS); 1090 1091 atomic_sub(KN_DEACTIVATED_BIAS, &pos->active); 1092 pos->flags |= KERNFS_ACTIVATED; 1093 } 1094 1095 mutex_unlock(&kernfs_mutex); 1096 } 1097 1098 static void __kernfs_remove(struct kernfs_node *kn) 1099 { 1100 struct kernfs_node *pos; 1101 1102 lockdep_assert_held(&kernfs_mutex); 1103 1104 /* 1105 * Short-circuit if non-root @kn has already finished removal. 1106 * This is for kernfs_remove_self() which plays with active ref 1107 * after removal. 1108 */ 1109 if (!kn || (kn->parent && RB_EMPTY_NODE(&kn->rb))) 1110 return; 1111 1112 pr_debug("kernfs %s: removing\n", kn->name); 1113 1114 /* prevent any new usage under @kn by deactivating all nodes */ 1115 pos = NULL; 1116 while ((pos = kernfs_next_descendant_post(pos, kn))) 1117 if (kernfs_active(pos)) 1118 atomic_add(KN_DEACTIVATED_BIAS, &pos->active); 1119 1120 /* deactivate and unlink the subtree node-by-node */ 1121 do { 1122 pos = kernfs_leftmost_descendant(kn); 1123 1124 /* 1125 * kernfs_drain() drops kernfs_mutex temporarily and @pos's 1126 * base ref could have been put by someone else by the time 1127 * the function returns. Make sure it doesn't go away 1128 * underneath us. 1129 */ 1130 kernfs_get(pos); 1131 1132 /* 1133 * Drain iff @kn was activated. This avoids draining and 1134 * its lockdep annotations for nodes which have never been 1135 * activated and allows embedding kernfs_remove() in create 1136 * error paths without worrying about draining. 1137 */ 1138 if (kn->flags & KERNFS_ACTIVATED) 1139 kernfs_drain(pos); 1140 else 1141 WARN_ON_ONCE(atomic_read(&kn->active) != KN_DEACTIVATED_BIAS); 1142 1143 /* 1144 * kernfs_unlink_sibling() succeeds once per node. Use it 1145 * to decide who's responsible for cleanups. 1146 */ 1147 if (!pos->parent || kernfs_unlink_sibling(pos)) { 1148 struct kernfs_iattrs *ps_iattr = 1149 pos->parent ? pos->parent->iattr : NULL; 1150 1151 /* update timestamps on the parent */ 1152 if (ps_iattr) { 1153 ps_iattr->ia_iattr.ia_ctime = CURRENT_TIME; 1154 ps_iattr->ia_iattr.ia_mtime = CURRENT_TIME; 1155 } 1156 1157 kernfs_put(pos); 1158 } 1159 1160 kernfs_put(pos); 1161 } while (pos != kn); 1162 } 1163 1164 /** 1165 * kernfs_remove - remove a kernfs_node recursively 1166 * @kn: the kernfs_node to remove 1167 * 1168 * Remove @kn along with all its subdirectories and files. 1169 */ 1170 void kernfs_remove(struct kernfs_node *kn) 1171 { 1172 mutex_lock(&kernfs_mutex); 1173 __kernfs_remove(kn); 1174 mutex_unlock(&kernfs_mutex); 1175 } 1176 1177 /** 1178 * kernfs_break_active_protection - break out of active protection 1179 * @kn: the self kernfs_node 1180 * 1181 * The caller must be running off of a kernfs operation which is invoked 1182 * with an active reference - e.g. one of kernfs_ops. Each invocation of 1183 * this function must also be matched with an invocation of 1184 * kernfs_unbreak_active_protection(). 1185 * 1186 * This function releases the active reference of @kn the caller is 1187 * holding. Once this function is called, @kn may be removed at any point 1188 * and the caller is solely responsible for ensuring that the objects it 1189 * dereferences are accessible. 1190 */ 1191 void kernfs_break_active_protection(struct kernfs_node *kn) 1192 { 1193 /* 1194 * Take out ourself out of the active ref dependency chain. If 1195 * we're called without an active ref, lockdep will complain. 1196 */ 1197 kernfs_put_active(kn); 1198 } 1199 1200 /** 1201 * kernfs_unbreak_active_protection - undo kernfs_break_active_protection() 1202 * @kn: the self kernfs_node 1203 * 1204 * If kernfs_break_active_protection() was called, this function must be 1205 * invoked before finishing the kernfs operation. Note that while this 1206 * function restores the active reference, it doesn't and can't actually 1207 * restore the active protection - @kn may already or be in the process of 1208 * being removed. Once kernfs_break_active_protection() is invoked, that 1209 * protection is irreversibly gone for the kernfs operation instance. 1210 * 1211 * While this function may be called at any point after 1212 * kernfs_break_active_protection() is invoked, its most useful location 1213 * would be right before the enclosing kernfs operation returns. 1214 */ 1215 void kernfs_unbreak_active_protection(struct kernfs_node *kn) 1216 { 1217 /* 1218 * @kn->active could be in any state; however, the increment we do 1219 * here will be undone as soon as the enclosing kernfs operation 1220 * finishes and this temporary bump can't break anything. If @kn 1221 * is alive, nothing changes. If @kn is being deactivated, the 1222 * soon-to-follow put will either finish deactivation or restore 1223 * deactivated state. If @kn is already removed, the temporary 1224 * bump is guaranteed to be gone before @kn is released. 1225 */ 1226 atomic_inc(&kn->active); 1227 if (kernfs_lockdep(kn)) 1228 rwsem_acquire(&kn->dep_map, 0, 1, _RET_IP_); 1229 } 1230 1231 /** 1232 * kernfs_remove_self - remove a kernfs_node from its own method 1233 * @kn: the self kernfs_node to remove 1234 * 1235 * The caller must be running off of a kernfs operation which is invoked 1236 * with an active reference - e.g. one of kernfs_ops. This can be used to 1237 * implement a file operation which deletes itself. 1238 * 1239 * For example, the "delete" file for a sysfs device directory can be 1240 * implemented by invoking kernfs_remove_self() on the "delete" file 1241 * itself. This function breaks the circular dependency of trying to 1242 * deactivate self while holding an active ref itself. It isn't necessary 1243 * to modify the usual removal path to use kernfs_remove_self(). The 1244 * "delete" implementation can simply invoke kernfs_remove_self() on self 1245 * before proceeding with the usual removal path. kernfs will ignore later 1246 * kernfs_remove() on self. 1247 * 1248 * kernfs_remove_self() can be called multiple times concurrently on the 1249 * same kernfs_node. Only the first one actually performs removal and 1250 * returns %true. All others will wait until the kernfs operation which 1251 * won self-removal finishes and return %false. Note that the losers wait 1252 * for the completion of not only the winning kernfs_remove_self() but also 1253 * the whole kernfs_ops which won the arbitration. This can be used to 1254 * guarantee, for example, all concurrent writes to a "delete" file to 1255 * finish only after the whole operation is complete. 1256 */ 1257 bool kernfs_remove_self(struct kernfs_node *kn) 1258 { 1259 bool ret; 1260 1261 mutex_lock(&kernfs_mutex); 1262 kernfs_break_active_protection(kn); 1263 1264 /* 1265 * SUICIDAL is used to arbitrate among competing invocations. Only 1266 * the first one will actually perform removal. When the removal 1267 * is complete, SUICIDED is set and the active ref is restored 1268 * while holding kernfs_mutex. The ones which lost arbitration 1269 * waits for SUICDED && drained which can happen only after the 1270 * enclosing kernfs operation which executed the winning instance 1271 * of kernfs_remove_self() finished. 1272 */ 1273 if (!(kn->flags & KERNFS_SUICIDAL)) { 1274 kn->flags |= KERNFS_SUICIDAL; 1275 __kernfs_remove(kn); 1276 kn->flags |= KERNFS_SUICIDED; 1277 ret = true; 1278 } else { 1279 wait_queue_head_t *waitq = &kernfs_root(kn)->deactivate_waitq; 1280 DEFINE_WAIT(wait); 1281 1282 while (true) { 1283 prepare_to_wait(waitq, &wait, TASK_UNINTERRUPTIBLE); 1284 1285 if ((kn->flags & KERNFS_SUICIDED) && 1286 atomic_read(&kn->active) == KN_DEACTIVATED_BIAS) 1287 break; 1288 1289 mutex_unlock(&kernfs_mutex); 1290 schedule(); 1291 mutex_lock(&kernfs_mutex); 1292 } 1293 finish_wait(waitq, &wait); 1294 WARN_ON_ONCE(!RB_EMPTY_NODE(&kn->rb)); 1295 ret = false; 1296 } 1297 1298 /* 1299 * This must be done while holding kernfs_mutex; otherwise, waiting 1300 * for SUICIDED && deactivated could finish prematurely. 1301 */ 1302 kernfs_unbreak_active_protection(kn); 1303 1304 mutex_unlock(&kernfs_mutex); 1305 return ret; 1306 } 1307 1308 /** 1309 * kernfs_remove_by_name_ns - find a kernfs_node by name and remove it 1310 * @parent: parent of the target 1311 * @name: name of the kernfs_node to remove 1312 * @ns: namespace tag of the kernfs_node to remove 1313 * 1314 * Look for the kernfs_node with @name and @ns under @parent and remove it. 1315 * Returns 0 on success, -ENOENT if such entry doesn't exist. 1316 */ 1317 int kernfs_remove_by_name_ns(struct kernfs_node *parent, const char *name, 1318 const void *ns) 1319 { 1320 struct kernfs_node *kn; 1321 1322 if (!parent) { 1323 WARN(1, KERN_WARNING "kernfs: can not remove '%s', no directory\n", 1324 name); 1325 return -ENOENT; 1326 } 1327 1328 mutex_lock(&kernfs_mutex); 1329 1330 kn = kernfs_find_ns(parent, name, ns); 1331 if (kn) 1332 __kernfs_remove(kn); 1333 1334 mutex_unlock(&kernfs_mutex); 1335 1336 if (kn) 1337 return 0; 1338 else 1339 return -ENOENT; 1340 } 1341 1342 /** 1343 * kernfs_rename_ns - move and rename a kernfs_node 1344 * @kn: target node 1345 * @new_parent: new parent to put @sd under 1346 * @new_name: new name 1347 * @new_ns: new namespace tag 1348 */ 1349 int kernfs_rename_ns(struct kernfs_node *kn, struct kernfs_node *new_parent, 1350 const char *new_name, const void *new_ns) 1351 { 1352 struct kernfs_node *old_parent; 1353 const char *old_name = NULL; 1354 int error; 1355 1356 /* can't move or rename root */ 1357 if (!kn->parent) 1358 return -EINVAL; 1359 1360 mutex_lock(&kernfs_mutex); 1361 1362 error = -ENOENT; 1363 if (!kernfs_active(kn) || !kernfs_active(new_parent) || 1364 (new_parent->flags & KERNFS_EMPTY_DIR)) 1365 goto out; 1366 1367 error = 0; 1368 if ((kn->parent == new_parent) && (kn->ns == new_ns) && 1369 (strcmp(kn->name, new_name) == 0)) 1370 goto out; /* nothing to rename */ 1371 1372 error = -EEXIST; 1373 if (kernfs_find_ns(new_parent, new_name, new_ns)) 1374 goto out; 1375 1376 /* rename kernfs_node */ 1377 if (strcmp(kn->name, new_name) != 0) { 1378 error = -ENOMEM; 1379 new_name = kstrdup_const(new_name, GFP_KERNEL); 1380 if (!new_name) 1381 goto out; 1382 } else { 1383 new_name = NULL; 1384 } 1385 1386 /* 1387 * Move to the appropriate place in the appropriate directories rbtree. 1388 */ 1389 kernfs_unlink_sibling(kn); 1390 kernfs_get(new_parent); 1391 1392 /* rename_lock protects ->parent and ->name accessors */ 1393 spin_lock_irq(&kernfs_rename_lock); 1394 1395 old_parent = kn->parent; 1396 kn->parent = new_parent; 1397 1398 kn->ns = new_ns; 1399 if (new_name) { 1400 old_name = kn->name; 1401 kn->name = new_name; 1402 } 1403 1404 spin_unlock_irq(&kernfs_rename_lock); 1405 1406 kn->hash = kernfs_name_hash(kn->name, kn->ns); 1407 kernfs_link_sibling(kn); 1408 1409 kernfs_put(old_parent); 1410 kfree_const(old_name); 1411 1412 error = 0; 1413 out: 1414 mutex_unlock(&kernfs_mutex); 1415 return error; 1416 } 1417 1418 /* Relationship between s_mode and the DT_xxx types */ 1419 static inline unsigned char dt_type(struct kernfs_node *kn) 1420 { 1421 return (kn->mode >> 12) & 15; 1422 } 1423 1424 static int kernfs_dir_fop_release(struct inode *inode, struct file *filp) 1425 { 1426 kernfs_put(filp->private_data); 1427 return 0; 1428 } 1429 1430 static struct kernfs_node *kernfs_dir_pos(const void *ns, 1431 struct kernfs_node *parent, loff_t hash, struct kernfs_node *pos) 1432 { 1433 if (pos) { 1434 int valid = kernfs_active(pos) && 1435 pos->parent == parent && hash == pos->hash; 1436 kernfs_put(pos); 1437 if (!valid) 1438 pos = NULL; 1439 } 1440 if (!pos && (hash > 1) && (hash < INT_MAX)) { 1441 struct rb_node *node = parent->dir.children.rb_node; 1442 while (node) { 1443 pos = rb_to_kn(node); 1444 1445 if (hash < pos->hash) 1446 node = node->rb_left; 1447 else if (hash > pos->hash) 1448 node = node->rb_right; 1449 else 1450 break; 1451 } 1452 } 1453 /* Skip over entries which are dying/dead or in the wrong namespace */ 1454 while (pos && (!kernfs_active(pos) || pos->ns != ns)) { 1455 struct rb_node *node = rb_next(&pos->rb); 1456 if (!node) 1457 pos = NULL; 1458 else 1459 pos = rb_to_kn(node); 1460 } 1461 return pos; 1462 } 1463 1464 static struct kernfs_node *kernfs_dir_next_pos(const void *ns, 1465 struct kernfs_node *parent, ino_t ino, struct kernfs_node *pos) 1466 { 1467 pos = kernfs_dir_pos(ns, parent, ino, pos); 1468 if (pos) { 1469 do { 1470 struct rb_node *node = rb_next(&pos->rb); 1471 if (!node) 1472 pos = NULL; 1473 else 1474 pos = rb_to_kn(node); 1475 } while (pos && (!kernfs_active(pos) || pos->ns != ns)); 1476 } 1477 return pos; 1478 } 1479 1480 static int kernfs_fop_readdir(struct file *file, struct dir_context *ctx) 1481 { 1482 struct dentry *dentry = file->f_path.dentry; 1483 struct kernfs_node *parent = dentry->d_fsdata; 1484 struct kernfs_node *pos = file->private_data; 1485 const void *ns = NULL; 1486 1487 if (!dir_emit_dots(file, ctx)) 1488 return 0; 1489 mutex_lock(&kernfs_mutex); 1490 1491 if (kernfs_ns_enabled(parent)) 1492 ns = kernfs_info(dentry->d_sb)->ns; 1493 1494 for (pos = kernfs_dir_pos(ns, parent, ctx->pos, pos); 1495 pos; 1496 pos = kernfs_dir_next_pos(ns, parent, ctx->pos, pos)) { 1497 const char *name = pos->name; 1498 unsigned int type = dt_type(pos); 1499 int len = strlen(name); 1500 ino_t ino = pos->ino; 1501 1502 ctx->pos = pos->hash; 1503 file->private_data = pos; 1504 kernfs_get(pos); 1505 1506 mutex_unlock(&kernfs_mutex); 1507 if (!dir_emit(ctx, name, len, ino, type)) 1508 return 0; 1509 mutex_lock(&kernfs_mutex); 1510 } 1511 mutex_unlock(&kernfs_mutex); 1512 file->private_data = NULL; 1513 ctx->pos = INT_MAX; 1514 return 0; 1515 } 1516 1517 static loff_t kernfs_dir_fop_llseek(struct file *file, loff_t offset, 1518 int whence) 1519 { 1520 struct inode *inode = file_inode(file); 1521 loff_t ret; 1522 1523 inode_lock(inode); 1524 ret = generic_file_llseek(file, offset, whence); 1525 inode_unlock(inode); 1526 1527 return ret; 1528 } 1529 1530 const struct file_operations kernfs_dir_fops = { 1531 .read = generic_read_dir, 1532 .iterate = kernfs_fop_readdir, 1533 .release = kernfs_dir_fop_release, 1534 .llseek = kernfs_dir_fop_llseek, 1535 }; 1536