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