1 /* 2 * fs/dcache.c 3 * 4 * Complete reimplementation 5 * (C) 1997 Thomas Schoebel-Theuer, 6 * with heavy changes by Linus Torvalds 7 */ 8 9 /* 10 * Notes on the allocation strategy: 11 * 12 * The dcache is a master of the icache - whenever a dcache entry 13 * exists, the inode will always exist. "iput()" is done either when 14 * the dcache entry is deleted or garbage collected. 15 */ 16 17 #include <linux/config.h> 18 #include <linux/syscalls.h> 19 #include <linux/string.h> 20 #include <linux/mm.h> 21 #include <linux/fs.h> 22 #include <linux/fsnotify.h> 23 #include <linux/slab.h> 24 #include <linux/init.h> 25 #include <linux/smp_lock.h> 26 #include <linux/hash.h> 27 #include <linux/cache.h> 28 #include <linux/module.h> 29 #include <linux/mount.h> 30 #include <linux/file.h> 31 #include <asm/uaccess.h> 32 #include <linux/security.h> 33 #include <linux/seqlock.h> 34 #include <linux/swap.h> 35 #include <linux/bootmem.h> 36 37 /* #define DCACHE_DEBUG 1 */ 38 39 int sysctl_vfs_cache_pressure = 100; 40 EXPORT_SYMBOL_GPL(sysctl_vfs_cache_pressure); 41 42 __cacheline_aligned_in_smp DEFINE_SPINLOCK(dcache_lock); 43 static seqlock_t rename_lock __cacheline_aligned_in_smp = SEQLOCK_UNLOCKED; 44 45 EXPORT_SYMBOL(dcache_lock); 46 47 static kmem_cache_t *dentry_cache; 48 49 #define DNAME_INLINE_LEN (sizeof(struct dentry)-offsetof(struct dentry,d_iname)) 50 51 /* 52 * This is the single most critical data structure when it comes 53 * to the dcache: the hashtable for lookups. Somebody should try 54 * to make this good - I've just made it work. 55 * 56 * This hash-function tries to avoid losing too many bits of hash 57 * information, yet avoid using a prime hash-size or similar. 58 */ 59 #define D_HASHBITS d_hash_shift 60 #define D_HASHMASK d_hash_mask 61 62 static unsigned int d_hash_mask; 63 static unsigned int d_hash_shift; 64 static struct hlist_head *dentry_hashtable; 65 static LIST_HEAD(dentry_unused); 66 67 /* Statistics gathering. */ 68 struct dentry_stat_t dentry_stat = { 69 .age_limit = 45, 70 }; 71 72 static void d_callback(struct rcu_head *head) 73 { 74 struct dentry * dentry = container_of(head, struct dentry, d_u.d_rcu); 75 76 if (dname_external(dentry)) 77 kfree(dentry->d_name.name); 78 kmem_cache_free(dentry_cache, dentry); 79 } 80 81 /* 82 * no dcache_lock, please. The caller must decrement dentry_stat.nr_dentry 83 * inside dcache_lock. 84 */ 85 static void d_free(struct dentry *dentry) 86 { 87 if (dentry->d_op && dentry->d_op->d_release) 88 dentry->d_op->d_release(dentry); 89 call_rcu(&dentry->d_u.d_rcu, d_callback); 90 } 91 92 /* 93 * Release the dentry's inode, using the filesystem 94 * d_iput() operation if defined. 95 * Called with dcache_lock and per dentry lock held, drops both. 96 */ 97 static void dentry_iput(struct dentry * dentry) 98 { 99 struct inode *inode = dentry->d_inode; 100 if (inode) { 101 dentry->d_inode = NULL; 102 list_del_init(&dentry->d_alias); 103 spin_unlock(&dentry->d_lock); 104 spin_unlock(&dcache_lock); 105 if (!inode->i_nlink) 106 fsnotify_inoderemove(inode); 107 if (dentry->d_op && dentry->d_op->d_iput) 108 dentry->d_op->d_iput(dentry, inode); 109 else 110 iput(inode); 111 } else { 112 spin_unlock(&dentry->d_lock); 113 spin_unlock(&dcache_lock); 114 } 115 } 116 117 /* 118 * This is dput 119 * 120 * This is complicated by the fact that we do not want to put 121 * dentries that are no longer on any hash chain on the unused 122 * list: we'd much rather just get rid of them immediately. 123 * 124 * However, that implies that we have to traverse the dentry 125 * tree upwards to the parents which might _also_ now be 126 * scheduled for deletion (it may have been only waiting for 127 * its last child to go away). 128 * 129 * This tail recursion is done by hand as we don't want to depend 130 * on the compiler to always get this right (gcc generally doesn't). 131 * Real recursion would eat up our stack space. 132 */ 133 134 /* 135 * dput - release a dentry 136 * @dentry: dentry to release 137 * 138 * Release a dentry. This will drop the usage count and if appropriate 139 * call the dentry unlink method as well as removing it from the queues and 140 * releasing its resources. If the parent dentries were scheduled for release 141 * they too may now get deleted. 142 * 143 * no dcache lock, please. 144 */ 145 146 void dput(struct dentry *dentry) 147 { 148 if (!dentry) 149 return; 150 151 repeat: 152 if (atomic_read(&dentry->d_count) == 1) 153 might_sleep(); 154 if (!atomic_dec_and_lock(&dentry->d_count, &dcache_lock)) 155 return; 156 157 spin_lock(&dentry->d_lock); 158 if (atomic_read(&dentry->d_count)) { 159 spin_unlock(&dentry->d_lock); 160 spin_unlock(&dcache_lock); 161 return; 162 } 163 164 /* 165 * AV: ->d_delete() is _NOT_ allowed to block now. 166 */ 167 if (dentry->d_op && dentry->d_op->d_delete) { 168 if (dentry->d_op->d_delete(dentry)) 169 goto unhash_it; 170 } 171 /* Unreachable? Get rid of it */ 172 if (d_unhashed(dentry)) 173 goto kill_it; 174 if (list_empty(&dentry->d_lru)) { 175 dentry->d_flags |= DCACHE_REFERENCED; 176 list_add(&dentry->d_lru, &dentry_unused); 177 dentry_stat.nr_unused++; 178 } 179 spin_unlock(&dentry->d_lock); 180 spin_unlock(&dcache_lock); 181 return; 182 183 unhash_it: 184 __d_drop(dentry); 185 186 kill_it: { 187 struct dentry *parent; 188 189 /* If dentry was on d_lru list 190 * delete it from there 191 */ 192 if (!list_empty(&dentry->d_lru)) { 193 list_del(&dentry->d_lru); 194 dentry_stat.nr_unused--; 195 } 196 list_del(&dentry->d_u.d_child); 197 dentry_stat.nr_dentry--; /* For d_free, below */ 198 /*drops the locks, at that point nobody can reach this dentry */ 199 dentry_iput(dentry); 200 parent = dentry->d_parent; 201 d_free(dentry); 202 if (dentry == parent) 203 return; 204 dentry = parent; 205 goto repeat; 206 } 207 } 208 209 /** 210 * d_invalidate - invalidate a dentry 211 * @dentry: dentry to invalidate 212 * 213 * Try to invalidate the dentry if it turns out to be 214 * possible. If there are other dentries that can be 215 * reached through this one we can't delete it and we 216 * return -EBUSY. On success we return 0. 217 * 218 * no dcache lock. 219 */ 220 221 int d_invalidate(struct dentry * dentry) 222 { 223 /* 224 * If it's already been dropped, return OK. 225 */ 226 spin_lock(&dcache_lock); 227 if (d_unhashed(dentry)) { 228 spin_unlock(&dcache_lock); 229 return 0; 230 } 231 /* 232 * Check whether to do a partial shrink_dcache 233 * to get rid of unused child entries. 234 */ 235 if (!list_empty(&dentry->d_subdirs)) { 236 spin_unlock(&dcache_lock); 237 shrink_dcache_parent(dentry); 238 spin_lock(&dcache_lock); 239 } 240 241 /* 242 * Somebody else still using it? 243 * 244 * If it's a directory, we can't drop it 245 * for fear of somebody re-populating it 246 * with children (even though dropping it 247 * would make it unreachable from the root, 248 * we might still populate it if it was a 249 * working directory or similar). 250 */ 251 spin_lock(&dentry->d_lock); 252 if (atomic_read(&dentry->d_count) > 1) { 253 if (dentry->d_inode && S_ISDIR(dentry->d_inode->i_mode)) { 254 spin_unlock(&dentry->d_lock); 255 spin_unlock(&dcache_lock); 256 return -EBUSY; 257 } 258 } 259 260 __d_drop(dentry); 261 spin_unlock(&dentry->d_lock); 262 spin_unlock(&dcache_lock); 263 return 0; 264 } 265 266 /* This should be called _only_ with dcache_lock held */ 267 268 static inline struct dentry * __dget_locked(struct dentry *dentry) 269 { 270 atomic_inc(&dentry->d_count); 271 if (!list_empty(&dentry->d_lru)) { 272 dentry_stat.nr_unused--; 273 list_del_init(&dentry->d_lru); 274 } 275 return dentry; 276 } 277 278 struct dentry * dget_locked(struct dentry *dentry) 279 { 280 return __dget_locked(dentry); 281 } 282 283 /** 284 * d_find_alias - grab a hashed alias of inode 285 * @inode: inode in question 286 * @want_discon: flag, used by d_splice_alias, to request 287 * that only a DISCONNECTED alias be returned. 288 * 289 * If inode has a hashed alias, or is a directory and has any alias, 290 * acquire the reference to alias and return it. Otherwise return NULL. 291 * Notice that if inode is a directory there can be only one alias and 292 * it can be unhashed only if it has no children, or if it is the root 293 * of a filesystem. 294 * 295 * If the inode has a DCACHE_DISCONNECTED alias, then prefer 296 * any other hashed alias over that one unless @want_discon is set, 297 * in which case only return a DCACHE_DISCONNECTED alias. 298 */ 299 300 static struct dentry * __d_find_alias(struct inode *inode, int want_discon) 301 { 302 struct list_head *head, *next, *tmp; 303 struct dentry *alias, *discon_alias=NULL; 304 305 head = &inode->i_dentry; 306 next = inode->i_dentry.next; 307 while (next != head) { 308 tmp = next; 309 next = tmp->next; 310 prefetch(next); 311 alias = list_entry(tmp, struct dentry, d_alias); 312 if (S_ISDIR(inode->i_mode) || !d_unhashed(alias)) { 313 if (alias->d_flags & DCACHE_DISCONNECTED) 314 discon_alias = alias; 315 else if (!want_discon) { 316 __dget_locked(alias); 317 return alias; 318 } 319 } 320 } 321 if (discon_alias) 322 __dget_locked(discon_alias); 323 return discon_alias; 324 } 325 326 struct dentry * d_find_alias(struct inode *inode) 327 { 328 struct dentry *de; 329 spin_lock(&dcache_lock); 330 de = __d_find_alias(inode, 0); 331 spin_unlock(&dcache_lock); 332 return de; 333 } 334 335 /* 336 * Try to kill dentries associated with this inode. 337 * WARNING: you must own a reference to inode. 338 */ 339 void d_prune_aliases(struct inode *inode) 340 { 341 struct dentry *dentry; 342 restart: 343 spin_lock(&dcache_lock); 344 list_for_each_entry(dentry, &inode->i_dentry, d_alias) { 345 spin_lock(&dentry->d_lock); 346 if (!atomic_read(&dentry->d_count)) { 347 __dget_locked(dentry); 348 __d_drop(dentry); 349 spin_unlock(&dentry->d_lock); 350 spin_unlock(&dcache_lock); 351 dput(dentry); 352 goto restart; 353 } 354 spin_unlock(&dentry->d_lock); 355 } 356 spin_unlock(&dcache_lock); 357 } 358 359 /* 360 * Throw away a dentry - free the inode, dput the parent. 361 * This requires that the LRU list has already been 362 * removed. 363 * Called with dcache_lock, drops it and then regains. 364 */ 365 static inline void prune_one_dentry(struct dentry * dentry) 366 { 367 struct dentry * parent; 368 369 __d_drop(dentry); 370 list_del(&dentry->d_u.d_child); 371 dentry_stat.nr_dentry--; /* For d_free, below */ 372 dentry_iput(dentry); 373 parent = dentry->d_parent; 374 d_free(dentry); 375 if (parent != dentry) 376 dput(parent); 377 spin_lock(&dcache_lock); 378 } 379 380 /** 381 * prune_dcache - shrink the dcache 382 * @count: number of entries to try and free 383 * 384 * Shrink the dcache. This is done when we need 385 * more memory, or simply when we need to unmount 386 * something (at which point we need to unuse 387 * all dentries). 388 * 389 * This function may fail to free any resources if 390 * all the dentries are in use. 391 */ 392 393 static void prune_dcache(int count) 394 { 395 spin_lock(&dcache_lock); 396 for (; count ; count--) { 397 struct dentry *dentry; 398 struct list_head *tmp; 399 400 cond_resched_lock(&dcache_lock); 401 402 tmp = dentry_unused.prev; 403 if (tmp == &dentry_unused) 404 break; 405 list_del_init(tmp); 406 prefetch(dentry_unused.prev); 407 dentry_stat.nr_unused--; 408 dentry = list_entry(tmp, struct dentry, d_lru); 409 410 spin_lock(&dentry->d_lock); 411 /* 412 * We found an inuse dentry which was not removed from 413 * dentry_unused because of laziness during lookup. Do not free 414 * it - just keep it off the dentry_unused list. 415 */ 416 if (atomic_read(&dentry->d_count)) { 417 spin_unlock(&dentry->d_lock); 418 continue; 419 } 420 /* If the dentry was recently referenced, don't free it. */ 421 if (dentry->d_flags & DCACHE_REFERENCED) { 422 dentry->d_flags &= ~DCACHE_REFERENCED; 423 list_add(&dentry->d_lru, &dentry_unused); 424 dentry_stat.nr_unused++; 425 spin_unlock(&dentry->d_lock); 426 continue; 427 } 428 prune_one_dentry(dentry); 429 } 430 spin_unlock(&dcache_lock); 431 } 432 433 /* 434 * Shrink the dcache for the specified super block. 435 * This allows us to unmount a device without disturbing 436 * the dcache for the other devices. 437 * 438 * This implementation makes just two traversals of the 439 * unused list. On the first pass we move the selected 440 * dentries to the most recent end, and on the second 441 * pass we free them. The second pass must restart after 442 * each dput(), but since the target dentries are all at 443 * the end, it's really just a single traversal. 444 */ 445 446 /** 447 * shrink_dcache_sb - shrink dcache for a superblock 448 * @sb: superblock 449 * 450 * Shrink the dcache for the specified super block. This 451 * is used to free the dcache before unmounting a file 452 * system 453 */ 454 455 void shrink_dcache_sb(struct super_block * sb) 456 { 457 struct list_head *tmp, *next; 458 struct dentry *dentry; 459 460 /* 461 * Pass one ... move the dentries for the specified 462 * superblock to the most recent end of the unused list. 463 */ 464 spin_lock(&dcache_lock); 465 list_for_each_safe(tmp, next, &dentry_unused) { 466 dentry = list_entry(tmp, struct dentry, d_lru); 467 if (dentry->d_sb != sb) 468 continue; 469 list_del(tmp); 470 list_add(tmp, &dentry_unused); 471 } 472 473 /* 474 * Pass two ... free the dentries for this superblock. 475 */ 476 repeat: 477 list_for_each_safe(tmp, next, &dentry_unused) { 478 dentry = list_entry(tmp, struct dentry, d_lru); 479 if (dentry->d_sb != sb) 480 continue; 481 dentry_stat.nr_unused--; 482 list_del_init(tmp); 483 spin_lock(&dentry->d_lock); 484 if (atomic_read(&dentry->d_count)) { 485 spin_unlock(&dentry->d_lock); 486 continue; 487 } 488 prune_one_dentry(dentry); 489 goto repeat; 490 } 491 spin_unlock(&dcache_lock); 492 } 493 494 /* 495 * Search for at least 1 mount point in the dentry's subdirs. 496 * We descend to the next level whenever the d_subdirs 497 * list is non-empty and continue searching. 498 */ 499 500 /** 501 * have_submounts - check for mounts over a dentry 502 * @parent: dentry to check. 503 * 504 * Return true if the parent or its subdirectories contain 505 * a mount point 506 */ 507 508 int have_submounts(struct dentry *parent) 509 { 510 struct dentry *this_parent = parent; 511 struct list_head *next; 512 513 spin_lock(&dcache_lock); 514 if (d_mountpoint(parent)) 515 goto positive; 516 repeat: 517 next = this_parent->d_subdirs.next; 518 resume: 519 while (next != &this_parent->d_subdirs) { 520 struct list_head *tmp = next; 521 struct dentry *dentry = list_entry(tmp, struct dentry, d_u.d_child); 522 next = tmp->next; 523 /* Have we found a mount point ? */ 524 if (d_mountpoint(dentry)) 525 goto positive; 526 if (!list_empty(&dentry->d_subdirs)) { 527 this_parent = dentry; 528 goto repeat; 529 } 530 } 531 /* 532 * All done at this level ... ascend and resume the search. 533 */ 534 if (this_parent != parent) { 535 next = this_parent->d_u.d_child.next; 536 this_parent = this_parent->d_parent; 537 goto resume; 538 } 539 spin_unlock(&dcache_lock); 540 return 0; /* No mount points found in tree */ 541 positive: 542 spin_unlock(&dcache_lock); 543 return 1; 544 } 545 546 /* 547 * Search the dentry child list for the specified parent, 548 * and move any unused dentries to the end of the unused 549 * list for prune_dcache(). We descend to the next level 550 * whenever the d_subdirs list is non-empty and continue 551 * searching. 552 * 553 * It returns zero iff there are no unused children, 554 * otherwise it returns the number of children moved to 555 * the end of the unused list. This may not be the total 556 * number of unused children, because select_parent can 557 * drop the lock and return early due to latency 558 * constraints. 559 */ 560 static int select_parent(struct dentry * parent) 561 { 562 struct dentry *this_parent = parent; 563 struct list_head *next; 564 int found = 0; 565 566 spin_lock(&dcache_lock); 567 repeat: 568 next = this_parent->d_subdirs.next; 569 resume: 570 while (next != &this_parent->d_subdirs) { 571 struct list_head *tmp = next; 572 struct dentry *dentry = list_entry(tmp, struct dentry, d_u.d_child); 573 next = tmp->next; 574 575 if (!list_empty(&dentry->d_lru)) { 576 dentry_stat.nr_unused--; 577 list_del_init(&dentry->d_lru); 578 } 579 /* 580 * move only zero ref count dentries to the end 581 * of the unused list for prune_dcache 582 */ 583 if (!atomic_read(&dentry->d_count)) { 584 list_add(&dentry->d_lru, dentry_unused.prev); 585 dentry_stat.nr_unused++; 586 found++; 587 } 588 589 /* 590 * We can return to the caller if we have found some (this 591 * ensures forward progress). We'll be coming back to find 592 * the rest. 593 */ 594 if (found && need_resched()) 595 goto out; 596 597 /* 598 * Descend a level if the d_subdirs list is non-empty. 599 */ 600 if (!list_empty(&dentry->d_subdirs)) { 601 this_parent = dentry; 602 #ifdef DCACHE_DEBUG 603 printk(KERN_DEBUG "select_parent: descending to %s/%s, found=%d\n", 604 dentry->d_parent->d_name.name, dentry->d_name.name, found); 605 #endif 606 goto repeat; 607 } 608 } 609 /* 610 * All done at this level ... ascend and resume the search. 611 */ 612 if (this_parent != parent) { 613 next = this_parent->d_u.d_child.next; 614 this_parent = this_parent->d_parent; 615 #ifdef DCACHE_DEBUG 616 printk(KERN_DEBUG "select_parent: ascending to %s/%s, found=%d\n", 617 this_parent->d_parent->d_name.name, this_parent->d_name.name, found); 618 #endif 619 goto resume; 620 } 621 out: 622 spin_unlock(&dcache_lock); 623 return found; 624 } 625 626 /** 627 * shrink_dcache_parent - prune dcache 628 * @parent: parent of entries to prune 629 * 630 * Prune the dcache to remove unused children of the parent dentry. 631 */ 632 633 void shrink_dcache_parent(struct dentry * parent) 634 { 635 int found; 636 637 while ((found = select_parent(parent)) != 0) 638 prune_dcache(found); 639 } 640 641 /** 642 * shrink_dcache_anon - further prune the cache 643 * @head: head of d_hash list of dentries to prune 644 * 645 * Prune the dentries that are anonymous 646 * 647 * parsing d_hash list does not hlist_for_each_entry_rcu() as it 648 * done under dcache_lock. 649 * 650 */ 651 void shrink_dcache_anon(struct hlist_head *head) 652 { 653 struct hlist_node *lp; 654 int found; 655 do { 656 found = 0; 657 spin_lock(&dcache_lock); 658 hlist_for_each(lp, head) { 659 struct dentry *this = hlist_entry(lp, struct dentry, d_hash); 660 if (!list_empty(&this->d_lru)) { 661 dentry_stat.nr_unused--; 662 list_del_init(&this->d_lru); 663 } 664 665 /* 666 * move only zero ref count dentries to the end 667 * of the unused list for prune_dcache 668 */ 669 if (!atomic_read(&this->d_count)) { 670 list_add_tail(&this->d_lru, &dentry_unused); 671 dentry_stat.nr_unused++; 672 found++; 673 } 674 } 675 spin_unlock(&dcache_lock); 676 prune_dcache(found); 677 } while(found); 678 } 679 680 /* 681 * Scan `nr' dentries and return the number which remain. 682 * 683 * We need to avoid reentering the filesystem if the caller is performing a 684 * GFP_NOFS allocation attempt. One example deadlock is: 685 * 686 * ext2_new_block->getblk->GFP->shrink_dcache_memory->prune_dcache-> 687 * prune_one_dentry->dput->dentry_iput->iput->inode->i_sb->s_op->put_inode-> 688 * ext2_discard_prealloc->ext2_free_blocks->lock_super->DEADLOCK. 689 * 690 * In this case we return -1 to tell the caller that we baled. 691 */ 692 static int shrink_dcache_memory(int nr, gfp_t gfp_mask) 693 { 694 if (nr) { 695 if (!(gfp_mask & __GFP_FS)) 696 return -1; 697 prune_dcache(nr); 698 } 699 return (dentry_stat.nr_unused / 100) * sysctl_vfs_cache_pressure; 700 } 701 702 /** 703 * d_alloc - allocate a dcache entry 704 * @parent: parent of entry to allocate 705 * @name: qstr of the name 706 * 707 * Allocates a dentry. It returns %NULL if there is insufficient memory 708 * available. On a success the dentry is returned. The name passed in is 709 * copied and the copy passed in may be reused after this call. 710 */ 711 712 struct dentry *d_alloc(struct dentry * parent, const struct qstr *name) 713 { 714 struct dentry *dentry; 715 char *dname; 716 717 dentry = kmem_cache_alloc(dentry_cache, GFP_KERNEL); 718 if (!dentry) 719 return NULL; 720 721 if (name->len > DNAME_INLINE_LEN-1) { 722 dname = kmalloc(name->len + 1, GFP_KERNEL); 723 if (!dname) { 724 kmem_cache_free(dentry_cache, dentry); 725 return NULL; 726 } 727 } else { 728 dname = dentry->d_iname; 729 } 730 dentry->d_name.name = dname; 731 732 dentry->d_name.len = name->len; 733 dentry->d_name.hash = name->hash; 734 memcpy(dname, name->name, name->len); 735 dname[name->len] = 0; 736 737 atomic_set(&dentry->d_count, 1); 738 dentry->d_flags = DCACHE_UNHASHED; 739 spin_lock_init(&dentry->d_lock); 740 dentry->d_inode = NULL; 741 dentry->d_parent = NULL; 742 dentry->d_sb = NULL; 743 dentry->d_op = NULL; 744 dentry->d_fsdata = NULL; 745 dentry->d_mounted = 0; 746 #ifdef CONFIG_PROFILING 747 dentry->d_cookie = NULL; 748 #endif 749 INIT_HLIST_NODE(&dentry->d_hash); 750 INIT_LIST_HEAD(&dentry->d_lru); 751 INIT_LIST_HEAD(&dentry->d_subdirs); 752 INIT_LIST_HEAD(&dentry->d_alias); 753 754 if (parent) { 755 dentry->d_parent = dget(parent); 756 dentry->d_sb = parent->d_sb; 757 } else { 758 INIT_LIST_HEAD(&dentry->d_u.d_child); 759 } 760 761 spin_lock(&dcache_lock); 762 if (parent) 763 list_add(&dentry->d_u.d_child, &parent->d_subdirs); 764 dentry_stat.nr_dentry++; 765 spin_unlock(&dcache_lock); 766 767 return dentry; 768 } 769 770 struct dentry *d_alloc_name(struct dentry *parent, const char *name) 771 { 772 struct qstr q; 773 774 q.name = name; 775 q.len = strlen(name); 776 q.hash = full_name_hash(q.name, q.len); 777 return d_alloc(parent, &q); 778 } 779 780 /** 781 * d_instantiate - fill in inode information for a dentry 782 * @entry: dentry to complete 783 * @inode: inode to attach to this dentry 784 * 785 * Fill in inode information in the entry. 786 * 787 * This turns negative dentries into productive full members 788 * of society. 789 * 790 * NOTE! This assumes that the inode count has been incremented 791 * (or otherwise set) by the caller to indicate that it is now 792 * in use by the dcache. 793 */ 794 795 void d_instantiate(struct dentry *entry, struct inode * inode) 796 { 797 if (!list_empty(&entry->d_alias)) BUG(); 798 spin_lock(&dcache_lock); 799 if (inode) 800 list_add(&entry->d_alias, &inode->i_dentry); 801 entry->d_inode = inode; 802 spin_unlock(&dcache_lock); 803 security_d_instantiate(entry, inode); 804 } 805 806 /** 807 * d_instantiate_unique - instantiate a non-aliased dentry 808 * @entry: dentry to instantiate 809 * @inode: inode to attach to this dentry 810 * 811 * Fill in inode information in the entry. On success, it returns NULL. 812 * If an unhashed alias of "entry" already exists, then we return the 813 * aliased dentry instead and drop one reference to inode. 814 * 815 * Note that in order to avoid conflicts with rename() etc, the caller 816 * had better be holding the parent directory semaphore. 817 * 818 * This also assumes that the inode count has been incremented 819 * (or otherwise set) by the caller to indicate that it is now 820 * in use by the dcache. 821 */ 822 struct dentry *d_instantiate_unique(struct dentry *entry, struct inode *inode) 823 { 824 struct dentry *alias; 825 int len = entry->d_name.len; 826 const char *name = entry->d_name.name; 827 unsigned int hash = entry->d_name.hash; 828 829 BUG_ON(!list_empty(&entry->d_alias)); 830 spin_lock(&dcache_lock); 831 if (!inode) 832 goto do_negative; 833 list_for_each_entry(alias, &inode->i_dentry, d_alias) { 834 struct qstr *qstr = &alias->d_name; 835 836 if (qstr->hash != hash) 837 continue; 838 if (alias->d_parent != entry->d_parent) 839 continue; 840 if (qstr->len != len) 841 continue; 842 if (memcmp(qstr->name, name, len)) 843 continue; 844 dget_locked(alias); 845 spin_unlock(&dcache_lock); 846 BUG_ON(!d_unhashed(alias)); 847 iput(inode); 848 return alias; 849 } 850 list_add(&entry->d_alias, &inode->i_dentry); 851 do_negative: 852 entry->d_inode = inode; 853 spin_unlock(&dcache_lock); 854 security_d_instantiate(entry, inode); 855 return NULL; 856 } 857 EXPORT_SYMBOL(d_instantiate_unique); 858 859 /** 860 * d_alloc_root - allocate root dentry 861 * @root_inode: inode to allocate the root for 862 * 863 * Allocate a root ("/") dentry for the inode given. The inode is 864 * instantiated and returned. %NULL is returned if there is insufficient 865 * memory or the inode passed is %NULL. 866 */ 867 868 struct dentry * d_alloc_root(struct inode * root_inode) 869 { 870 struct dentry *res = NULL; 871 872 if (root_inode) { 873 static const struct qstr name = { .name = "/", .len = 1 }; 874 875 res = d_alloc(NULL, &name); 876 if (res) { 877 res->d_sb = root_inode->i_sb; 878 res->d_parent = res; 879 d_instantiate(res, root_inode); 880 } 881 } 882 return res; 883 } 884 885 static inline struct hlist_head *d_hash(struct dentry *parent, 886 unsigned long hash) 887 { 888 hash += ((unsigned long) parent ^ GOLDEN_RATIO_PRIME) / L1_CACHE_BYTES; 889 hash = hash ^ ((hash ^ GOLDEN_RATIO_PRIME) >> D_HASHBITS); 890 return dentry_hashtable + (hash & D_HASHMASK); 891 } 892 893 /** 894 * d_alloc_anon - allocate an anonymous dentry 895 * @inode: inode to allocate the dentry for 896 * 897 * This is similar to d_alloc_root. It is used by filesystems when 898 * creating a dentry for a given inode, often in the process of 899 * mapping a filehandle to a dentry. The returned dentry may be 900 * anonymous, or may have a full name (if the inode was already 901 * in the cache). The file system may need to make further 902 * efforts to connect this dentry into the dcache properly. 903 * 904 * When called on a directory inode, we must ensure that 905 * the inode only ever has one dentry. If a dentry is 906 * found, that is returned instead of allocating a new one. 907 * 908 * On successful return, the reference to the inode has been transferred 909 * to the dentry. If %NULL is returned (indicating kmalloc failure), 910 * the reference on the inode has not been released. 911 */ 912 913 struct dentry * d_alloc_anon(struct inode *inode) 914 { 915 static const struct qstr anonstring = { .name = "" }; 916 struct dentry *tmp; 917 struct dentry *res; 918 919 if ((res = d_find_alias(inode))) { 920 iput(inode); 921 return res; 922 } 923 924 tmp = d_alloc(NULL, &anonstring); 925 if (!tmp) 926 return NULL; 927 928 tmp->d_parent = tmp; /* make sure dput doesn't croak */ 929 930 spin_lock(&dcache_lock); 931 res = __d_find_alias(inode, 0); 932 if (!res) { 933 /* attach a disconnected dentry */ 934 res = tmp; 935 tmp = NULL; 936 spin_lock(&res->d_lock); 937 res->d_sb = inode->i_sb; 938 res->d_parent = res; 939 res->d_inode = inode; 940 res->d_flags |= DCACHE_DISCONNECTED; 941 res->d_flags &= ~DCACHE_UNHASHED; 942 list_add(&res->d_alias, &inode->i_dentry); 943 hlist_add_head(&res->d_hash, &inode->i_sb->s_anon); 944 spin_unlock(&res->d_lock); 945 946 inode = NULL; /* don't drop reference */ 947 } 948 spin_unlock(&dcache_lock); 949 950 if (inode) 951 iput(inode); 952 if (tmp) 953 dput(tmp); 954 return res; 955 } 956 957 958 /** 959 * d_splice_alias - splice a disconnected dentry into the tree if one exists 960 * @inode: the inode which may have a disconnected dentry 961 * @dentry: a negative dentry which we want to point to the inode. 962 * 963 * If inode is a directory and has a 'disconnected' dentry (i.e. IS_ROOT and 964 * DCACHE_DISCONNECTED), then d_move that in place of the given dentry 965 * and return it, else simply d_add the inode to the dentry and return NULL. 966 * 967 * This is needed in the lookup routine of any filesystem that is exportable 968 * (via knfsd) so that we can build dcache paths to directories effectively. 969 * 970 * If a dentry was found and moved, then it is returned. Otherwise NULL 971 * is returned. This matches the expected return value of ->lookup. 972 * 973 */ 974 struct dentry *d_splice_alias(struct inode *inode, struct dentry *dentry) 975 { 976 struct dentry *new = NULL; 977 978 if (inode) { 979 spin_lock(&dcache_lock); 980 new = __d_find_alias(inode, 1); 981 if (new) { 982 BUG_ON(!(new->d_flags & DCACHE_DISCONNECTED)); 983 spin_unlock(&dcache_lock); 984 security_d_instantiate(new, inode); 985 d_rehash(dentry); 986 d_move(new, dentry); 987 iput(inode); 988 } else { 989 /* d_instantiate takes dcache_lock, so we do it by hand */ 990 list_add(&dentry->d_alias, &inode->i_dentry); 991 dentry->d_inode = inode; 992 spin_unlock(&dcache_lock); 993 security_d_instantiate(dentry, inode); 994 d_rehash(dentry); 995 } 996 } else 997 d_add(dentry, inode); 998 return new; 999 } 1000 1001 1002 /** 1003 * d_lookup - search for a dentry 1004 * @parent: parent dentry 1005 * @name: qstr of name we wish to find 1006 * 1007 * Searches the children of the parent dentry for the name in question. If 1008 * the dentry is found its reference count is incremented and the dentry 1009 * is returned. The caller must use d_put to free the entry when it has 1010 * finished using it. %NULL is returned on failure. 1011 * 1012 * __d_lookup is dcache_lock free. The hash list is protected using RCU. 1013 * Memory barriers are used while updating and doing lockless traversal. 1014 * To avoid races with d_move while rename is happening, d_lock is used. 1015 * 1016 * Overflows in memcmp(), while d_move, are avoided by keeping the length 1017 * and name pointer in one structure pointed by d_qstr. 1018 * 1019 * rcu_read_lock() and rcu_read_unlock() are used to disable preemption while 1020 * lookup is going on. 1021 * 1022 * dentry_unused list is not updated even if lookup finds the required dentry 1023 * in there. It is updated in places such as prune_dcache, shrink_dcache_sb, 1024 * select_parent and __dget_locked. This laziness saves lookup from dcache_lock 1025 * acquisition. 1026 * 1027 * d_lookup() is protected against the concurrent renames in some unrelated 1028 * directory using the seqlockt_t rename_lock. 1029 */ 1030 1031 struct dentry * d_lookup(struct dentry * parent, struct qstr * name) 1032 { 1033 struct dentry * dentry = NULL; 1034 unsigned long seq; 1035 1036 do { 1037 seq = read_seqbegin(&rename_lock); 1038 dentry = __d_lookup(parent, name); 1039 if (dentry) 1040 break; 1041 } while (read_seqretry(&rename_lock, seq)); 1042 return dentry; 1043 } 1044 1045 struct dentry * __d_lookup(struct dentry * parent, struct qstr * name) 1046 { 1047 unsigned int len = name->len; 1048 unsigned int hash = name->hash; 1049 const unsigned char *str = name->name; 1050 struct hlist_head *head = d_hash(parent,hash); 1051 struct dentry *found = NULL; 1052 struct hlist_node *node; 1053 struct dentry *dentry; 1054 1055 rcu_read_lock(); 1056 1057 hlist_for_each_entry_rcu(dentry, node, head, d_hash) { 1058 struct qstr *qstr; 1059 1060 if (dentry->d_name.hash != hash) 1061 continue; 1062 if (dentry->d_parent != parent) 1063 continue; 1064 1065 spin_lock(&dentry->d_lock); 1066 1067 /* 1068 * Recheck the dentry after taking the lock - d_move may have 1069 * changed things. Don't bother checking the hash because we're 1070 * about to compare the whole name anyway. 1071 */ 1072 if (dentry->d_parent != parent) 1073 goto next; 1074 1075 /* 1076 * It is safe to compare names since d_move() cannot 1077 * change the qstr (protected by d_lock). 1078 */ 1079 qstr = &dentry->d_name; 1080 if (parent->d_op && parent->d_op->d_compare) { 1081 if (parent->d_op->d_compare(parent, qstr, name)) 1082 goto next; 1083 } else { 1084 if (qstr->len != len) 1085 goto next; 1086 if (memcmp(qstr->name, str, len)) 1087 goto next; 1088 } 1089 1090 if (!d_unhashed(dentry)) { 1091 atomic_inc(&dentry->d_count); 1092 found = dentry; 1093 } 1094 spin_unlock(&dentry->d_lock); 1095 break; 1096 next: 1097 spin_unlock(&dentry->d_lock); 1098 } 1099 rcu_read_unlock(); 1100 1101 return found; 1102 } 1103 1104 /** 1105 * d_validate - verify dentry provided from insecure source 1106 * @dentry: The dentry alleged to be valid child of @dparent 1107 * @dparent: The parent dentry (known to be valid) 1108 * @hash: Hash of the dentry 1109 * @len: Length of the name 1110 * 1111 * An insecure source has sent us a dentry, here we verify it and dget() it. 1112 * This is used by ncpfs in its readdir implementation. 1113 * Zero is returned in the dentry is invalid. 1114 */ 1115 1116 int d_validate(struct dentry *dentry, struct dentry *dparent) 1117 { 1118 struct hlist_head *base; 1119 struct hlist_node *lhp; 1120 1121 /* Check whether the ptr might be valid at all.. */ 1122 if (!kmem_ptr_validate(dentry_cache, dentry)) 1123 goto out; 1124 1125 if (dentry->d_parent != dparent) 1126 goto out; 1127 1128 spin_lock(&dcache_lock); 1129 base = d_hash(dparent, dentry->d_name.hash); 1130 hlist_for_each(lhp,base) { 1131 /* hlist_for_each_entry_rcu() not required for d_hash list 1132 * as it is parsed under dcache_lock 1133 */ 1134 if (dentry == hlist_entry(lhp, struct dentry, d_hash)) { 1135 __dget_locked(dentry); 1136 spin_unlock(&dcache_lock); 1137 return 1; 1138 } 1139 } 1140 spin_unlock(&dcache_lock); 1141 out: 1142 return 0; 1143 } 1144 1145 /* 1146 * When a file is deleted, we have two options: 1147 * - turn this dentry into a negative dentry 1148 * - unhash this dentry and free it. 1149 * 1150 * Usually, we want to just turn this into 1151 * a negative dentry, but if anybody else is 1152 * currently using the dentry or the inode 1153 * we can't do that and we fall back on removing 1154 * it from the hash queues and waiting for 1155 * it to be deleted later when it has no users 1156 */ 1157 1158 /** 1159 * d_delete - delete a dentry 1160 * @dentry: The dentry to delete 1161 * 1162 * Turn the dentry into a negative dentry if possible, otherwise 1163 * remove it from the hash queues so it can be deleted later 1164 */ 1165 1166 void d_delete(struct dentry * dentry) 1167 { 1168 int isdir = 0; 1169 /* 1170 * Are we the only user? 1171 */ 1172 spin_lock(&dcache_lock); 1173 spin_lock(&dentry->d_lock); 1174 isdir = S_ISDIR(dentry->d_inode->i_mode); 1175 if (atomic_read(&dentry->d_count) == 1) { 1176 dentry_iput(dentry); 1177 fsnotify_nameremove(dentry, isdir); 1178 return; 1179 } 1180 1181 if (!d_unhashed(dentry)) 1182 __d_drop(dentry); 1183 1184 spin_unlock(&dentry->d_lock); 1185 spin_unlock(&dcache_lock); 1186 1187 fsnotify_nameremove(dentry, isdir); 1188 } 1189 1190 static void __d_rehash(struct dentry * entry, struct hlist_head *list) 1191 { 1192 1193 entry->d_flags &= ~DCACHE_UNHASHED; 1194 hlist_add_head_rcu(&entry->d_hash, list); 1195 } 1196 1197 /** 1198 * d_rehash - add an entry back to the hash 1199 * @entry: dentry to add to the hash 1200 * 1201 * Adds a dentry to the hash according to its name. 1202 */ 1203 1204 void d_rehash(struct dentry * entry) 1205 { 1206 struct hlist_head *list = d_hash(entry->d_parent, entry->d_name.hash); 1207 1208 spin_lock(&dcache_lock); 1209 spin_lock(&entry->d_lock); 1210 __d_rehash(entry, list); 1211 spin_unlock(&entry->d_lock); 1212 spin_unlock(&dcache_lock); 1213 } 1214 1215 #define do_switch(x,y) do { \ 1216 __typeof__ (x) __tmp = x; \ 1217 x = y; y = __tmp; } while (0) 1218 1219 /* 1220 * When switching names, the actual string doesn't strictly have to 1221 * be preserved in the target - because we're dropping the target 1222 * anyway. As such, we can just do a simple memcpy() to copy over 1223 * the new name before we switch. 1224 * 1225 * Note that we have to be a lot more careful about getting the hash 1226 * switched - we have to switch the hash value properly even if it 1227 * then no longer matches the actual (corrupted) string of the target. 1228 * The hash value has to match the hash queue that the dentry is on.. 1229 */ 1230 static void switch_names(struct dentry *dentry, struct dentry *target) 1231 { 1232 if (dname_external(target)) { 1233 if (dname_external(dentry)) { 1234 /* 1235 * Both external: swap the pointers 1236 */ 1237 do_switch(target->d_name.name, dentry->d_name.name); 1238 } else { 1239 /* 1240 * dentry:internal, target:external. Steal target's 1241 * storage and make target internal. 1242 */ 1243 dentry->d_name.name = target->d_name.name; 1244 target->d_name.name = target->d_iname; 1245 } 1246 } else { 1247 if (dname_external(dentry)) { 1248 /* 1249 * dentry:external, target:internal. Give dentry's 1250 * storage to target and make dentry internal 1251 */ 1252 memcpy(dentry->d_iname, target->d_name.name, 1253 target->d_name.len + 1); 1254 target->d_name.name = dentry->d_name.name; 1255 dentry->d_name.name = dentry->d_iname; 1256 } else { 1257 /* 1258 * Both are internal. Just copy target to dentry 1259 */ 1260 memcpy(dentry->d_iname, target->d_name.name, 1261 target->d_name.len + 1); 1262 } 1263 } 1264 } 1265 1266 /* 1267 * We cannibalize "target" when moving dentry on top of it, 1268 * because it's going to be thrown away anyway. We could be more 1269 * polite about it, though. 1270 * 1271 * This forceful removal will result in ugly /proc output if 1272 * somebody holds a file open that got deleted due to a rename. 1273 * We could be nicer about the deleted file, and let it show 1274 * up under the name it got deleted rather than the name that 1275 * deleted it. 1276 */ 1277 1278 /** 1279 * d_move - move a dentry 1280 * @dentry: entry to move 1281 * @target: new dentry 1282 * 1283 * Update the dcache to reflect the move of a file name. Negative 1284 * dcache entries should not be moved in this way. 1285 */ 1286 1287 void d_move(struct dentry * dentry, struct dentry * target) 1288 { 1289 struct hlist_head *list; 1290 1291 if (!dentry->d_inode) 1292 printk(KERN_WARNING "VFS: moving negative dcache entry\n"); 1293 1294 spin_lock(&dcache_lock); 1295 write_seqlock(&rename_lock); 1296 /* 1297 * XXXX: do we really need to take target->d_lock? 1298 */ 1299 if (target < dentry) { 1300 spin_lock(&target->d_lock); 1301 spin_lock(&dentry->d_lock); 1302 } else { 1303 spin_lock(&dentry->d_lock); 1304 spin_lock(&target->d_lock); 1305 } 1306 1307 /* Move the dentry to the target hash queue, if on different bucket */ 1308 if (dentry->d_flags & DCACHE_UNHASHED) 1309 goto already_unhashed; 1310 1311 hlist_del_rcu(&dentry->d_hash); 1312 1313 already_unhashed: 1314 list = d_hash(target->d_parent, target->d_name.hash); 1315 __d_rehash(dentry, list); 1316 1317 /* Unhash the target: dput() will then get rid of it */ 1318 __d_drop(target); 1319 1320 list_del(&dentry->d_u.d_child); 1321 list_del(&target->d_u.d_child); 1322 1323 /* Switch the names.. */ 1324 switch_names(dentry, target); 1325 do_switch(dentry->d_name.len, target->d_name.len); 1326 do_switch(dentry->d_name.hash, target->d_name.hash); 1327 1328 /* ... and switch the parents */ 1329 if (IS_ROOT(dentry)) { 1330 dentry->d_parent = target->d_parent; 1331 target->d_parent = target; 1332 INIT_LIST_HEAD(&target->d_u.d_child); 1333 } else { 1334 do_switch(dentry->d_parent, target->d_parent); 1335 1336 /* And add them back to the (new) parent lists */ 1337 list_add(&target->d_u.d_child, &target->d_parent->d_subdirs); 1338 } 1339 1340 list_add(&dentry->d_u.d_child, &dentry->d_parent->d_subdirs); 1341 spin_unlock(&target->d_lock); 1342 spin_unlock(&dentry->d_lock); 1343 write_sequnlock(&rename_lock); 1344 spin_unlock(&dcache_lock); 1345 } 1346 1347 /** 1348 * d_path - return the path of a dentry 1349 * @dentry: dentry to report 1350 * @vfsmnt: vfsmnt to which the dentry belongs 1351 * @root: root dentry 1352 * @rootmnt: vfsmnt to which the root dentry belongs 1353 * @buffer: buffer to return value in 1354 * @buflen: buffer length 1355 * 1356 * Convert a dentry into an ASCII path name. If the entry has been deleted 1357 * the string " (deleted)" is appended. Note that this is ambiguous. 1358 * 1359 * Returns the buffer or an error code if the path was too long. 1360 * 1361 * "buflen" should be positive. Caller holds the dcache_lock. 1362 */ 1363 static char * __d_path( struct dentry *dentry, struct vfsmount *vfsmnt, 1364 struct dentry *root, struct vfsmount *rootmnt, 1365 char *buffer, int buflen) 1366 { 1367 char * end = buffer+buflen; 1368 char * retval; 1369 int namelen; 1370 1371 *--end = '\0'; 1372 buflen--; 1373 if (!IS_ROOT(dentry) && d_unhashed(dentry)) { 1374 buflen -= 10; 1375 end -= 10; 1376 if (buflen < 0) 1377 goto Elong; 1378 memcpy(end, " (deleted)", 10); 1379 } 1380 1381 if (buflen < 1) 1382 goto Elong; 1383 /* Get '/' right */ 1384 retval = end-1; 1385 *retval = '/'; 1386 1387 for (;;) { 1388 struct dentry * parent; 1389 1390 if (dentry == root && vfsmnt == rootmnt) 1391 break; 1392 if (dentry == vfsmnt->mnt_root || IS_ROOT(dentry)) { 1393 /* Global root? */ 1394 spin_lock(&vfsmount_lock); 1395 if (vfsmnt->mnt_parent == vfsmnt) { 1396 spin_unlock(&vfsmount_lock); 1397 goto global_root; 1398 } 1399 dentry = vfsmnt->mnt_mountpoint; 1400 vfsmnt = vfsmnt->mnt_parent; 1401 spin_unlock(&vfsmount_lock); 1402 continue; 1403 } 1404 parent = dentry->d_parent; 1405 prefetch(parent); 1406 namelen = dentry->d_name.len; 1407 buflen -= namelen + 1; 1408 if (buflen < 0) 1409 goto Elong; 1410 end -= namelen; 1411 memcpy(end, dentry->d_name.name, namelen); 1412 *--end = '/'; 1413 retval = end; 1414 dentry = parent; 1415 } 1416 1417 return retval; 1418 1419 global_root: 1420 namelen = dentry->d_name.len; 1421 buflen -= namelen; 1422 if (buflen < 0) 1423 goto Elong; 1424 retval -= namelen-1; /* hit the slash */ 1425 memcpy(retval, dentry->d_name.name, namelen); 1426 return retval; 1427 Elong: 1428 return ERR_PTR(-ENAMETOOLONG); 1429 } 1430 1431 /* write full pathname into buffer and return start of pathname */ 1432 char * d_path(struct dentry *dentry, struct vfsmount *vfsmnt, 1433 char *buf, int buflen) 1434 { 1435 char *res; 1436 struct vfsmount *rootmnt; 1437 struct dentry *root; 1438 1439 read_lock(¤t->fs->lock); 1440 rootmnt = mntget(current->fs->rootmnt); 1441 root = dget(current->fs->root); 1442 read_unlock(¤t->fs->lock); 1443 spin_lock(&dcache_lock); 1444 res = __d_path(dentry, vfsmnt, root, rootmnt, buf, buflen); 1445 spin_unlock(&dcache_lock); 1446 dput(root); 1447 mntput(rootmnt); 1448 return res; 1449 } 1450 1451 /* 1452 * NOTE! The user-level library version returns a 1453 * character pointer. The kernel system call just 1454 * returns the length of the buffer filled (which 1455 * includes the ending '\0' character), or a negative 1456 * error value. So libc would do something like 1457 * 1458 * char *getcwd(char * buf, size_t size) 1459 * { 1460 * int retval; 1461 * 1462 * retval = sys_getcwd(buf, size); 1463 * if (retval >= 0) 1464 * return buf; 1465 * errno = -retval; 1466 * return NULL; 1467 * } 1468 */ 1469 asmlinkage long sys_getcwd(char __user *buf, unsigned long size) 1470 { 1471 int error; 1472 struct vfsmount *pwdmnt, *rootmnt; 1473 struct dentry *pwd, *root; 1474 char *page = (char *) __get_free_page(GFP_USER); 1475 1476 if (!page) 1477 return -ENOMEM; 1478 1479 read_lock(¤t->fs->lock); 1480 pwdmnt = mntget(current->fs->pwdmnt); 1481 pwd = dget(current->fs->pwd); 1482 rootmnt = mntget(current->fs->rootmnt); 1483 root = dget(current->fs->root); 1484 read_unlock(¤t->fs->lock); 1485 1486 error = -ENOENT; 1487 /* Has the current directory has been unlinked? */ 1488 spin_lock(&dcache_lock); 1489 if (pwd->d_parent == pwd || !d_unhashed(pwd)) { 1490 unsigned long len; 1491 char * cwd; 1492 1493 cwd = __d_path(pwd, pwdmnt, root, rootmnt, page, PAGE_SIZE); 1494 spin_unlock(&dcache_lock); 1495 1496 error = PTR_ERR(cwd); 1497 if (IS_ERR(cwd)) 1498 goto out; 1499 1500 error = -ERANGE; 1501 len = PAGE_SIZE + page - cwd; 1502 if (len <= size) { 1503 error = len; 1504 if (copy_to_user(buf, cwd, len)) 1505 error = -EFAULT; 1506 } 1507 } else 1508 spin_unlock(&dcache_lock); 1509 1510 out: 1511 dput(pwd); 1512 mntput(pwdmnt); 1513 dput(root); 1514 mntput(rootmnt); 1515 free_page((unsigned long) page); 1516 return error; 1517 } 1518 1519 /* 1520 * Test whether new_dentry is a subdirectory of old_dentry. 1521 * 1522 * Trivially implemented using the dcache structure 1523 */ 1524 1525 /** 1526 * is_subdir - is new dentry a subdirectory of old_dentry 1527 * @new_dentry: new dentry 1528 * @old_dentry: old dentry 1529 * 1530 * Returns 1 if new_dentry is a subdirectory of the parent (at any depth). 1531 * Returns 0 otherwise. 1532 * Caller must ensure that "new_dentry" is pinned before calling is_subdir() 1533 */ 1534 1535 int is_subdir(struct dentry * new_dentry, struct dentry * old_dentry) 1536 { 1537 int result; 1538 struct dentry * saved = new_dentry; 1539 unsigned long seq; 1540 1541 /* need rcu_readlock to protect against the d_parent trashing due to 1542 * d_move 1543 */ 1544 rcu_read_lock(); 1545 do { 1546 /* for restarting inner loop in case of seq retry */ 1547 new_dentry = saved; 1548 result = 0; 1549 seq = read_seqbegin(&rename_lock); 1550 for (;;) { 1551 if (new_dentry != old_dentry) { 1552 struct dentry * parent = new_dentry->d_parent; 1553 if (parent == new_dentry) 1554 break; 1555 new_dentry = parent; 1556 continue; 1557 } 1558 result = 1; 1559 break; 1560 } 1561 } while (read_seqretry(&rename_lock, seq)); 1562 rcu_read_unlock(); 1563 1564 return result; 1565 } 1566 1567 void d_genocide(struct dentry *root) 1568 { 1569 struct dentry *this_parent = root; 1570 struct list_head *next; 1571 1572 spin_lock(&dcache_lock); 1573 repeat: 1574 next = this_parent->d_subdirs.next; 1575 resume: 1576 while (next != &this_parent->d_subdirs) { 1577 struct list_head *tmp = next; 1578 struct dentry *dentry = list_entry(tmp, struct dentry, d_u.d_child); 1579 next = tmp->next; 1580 if (d_unhashed(dentry)||!dentry->d_inode) 1581 continue; 1582 if (!list_empty(&dentry->d_subdirs)) { 1583 this_parent = dentry; 1584 goto repeat; 1585 } 1586 atomic_dec(&dentry->d_count); 1587 } 1588 if (this_parent != root) { 1589 next = this_parent->d_u.d_child.next; 1590 atomic_dec(&this_parent->d_count); 1591 this_parent = this_parent->d_parent; 1592 goto resume; 1593 } 1594 spin_unlock(&dcache_lock); 1595 } 1596 1597 /** 1598 * find_inode_number - check for dentry with name 1599 * @dir: directory to check 1600 * @name: Name to find. 1601 * 1602 * Check whether a dentry already exists for the given name, 1603 * and return the inode number if it has an inode. Otherwise 1604 * 0 is returned. 1605 * 1606 * This routine is used to post-process directory listings for 1607 * filesystems using synthetic inode numbers, and is necessary 1608 * to keep getcwd() working. 1609 */ 1610 1611 ino_t find_inode_number(struct dentry *dir, struct qstr *name) 1612 { 1613 struct dentry * dentry; 1614 ino_t ino = 0; 1615 1616 /* 1617 * Check for a fs-specific hash function. Note that we must 1618 * calculate the standard hash first, as the d_op->d_hash() 1619 * routine may choose to leave the hash value unchanged. 1620 */ 1621 name->hash = full_name_hash(name->name, name->len); 1622 if (dir->d_op && dir->d_op->d_hash) 1623 { 1624 if (dir->d_op->d_hash(dir, name) != 0) 1625 goto out; 1626 } 1627 1628 dentry = d_lookup(dir, name); 1629 if (dentry) 1630 { 1631 if (dentry->d_inode) 1632 ino = dentry->d_inode->i_ino; 1633 dput(dentry); 1634 } 1635 out: 1636 return ino; 1637 } 1638 1639 static __initdata unsigned long dhash_entries; 1640 static int __init set_dhash_entries(char *str) 1641 { 1642 if (!str) 1643 return 0; 1644 dhash_entries = simple_strtoul(str, &str, 0); 1645 return 1; 1646 } 1647 __setup("dhash_entries=", set_dhash_entries); 1648 1649 static void __init dcache_init_early(void) 1650 { 1651 int loop; 1652 1653 /* If hashes are distributed across NUMA nodes, defer 1654 * hash allocation until vmalloc space is available. 1655 */ 1656 if (hashdist) 1657 return; 1658 1659 dentry_hashtable = 1660 alloc_large_system_hash("Dentry cache", 1661 sizeof(struct hlist_head), 1662 dhash_entries, 1663 13, 1664 HASH_EARLY, 1665 &d_hash_shift, 1666 &d_hash_mask, 1667 0); 1668 1669 for (loop = 0; loop < (1 << d_hash_shift); loop++) 1670 INIT_HLIST_HEAD(&dentry_hashtable[loop]); 1671 } 1672 1673 static void __init dcache_init(unsigned long mempages) 1674 { 1675 int loop; 1676 1677 /* 1678 * A constructor could be added for stable state like the lists, 1679 * but it is probably not worth it because of the cache nature 1680 * of the dcache. 1681 */ 1682 dentry_cache = kmem_cache_create("dentry_cache", 1683 sizeof(struct dentry), 1684 0, 1685 SLAB_RECLAIM_ACCOUNT|SLAB_PANIC, 1686 NULL, NULL); 1687 1688 set_shrinker(DEFAULT_SEEKS, shrink_dcache_memory); 1689 1690 /* Hash may have been set up in dcache_init_early */ 1691 if (!hashdist) 1692 return; 1693 1694 dentry_hashtable = 1695 alloc_large_system_hash("Dentry cache", 1696 sizeof(struct hlist_head), 1697 dhash_entries, 1698 13, 1699 0, 1700 &d_hash_shift, 1701 &d_hash_mask, 1702 0); 1703 1704 for (loop = 0; loop < (1 << d_hash_shift); loop++) 1705 INIT_HLIST_HEAD(&dentry_hashtable[loop]); 1706 } 1707 1708 /* SLAB cache for __getname() consumers */ 1709 kmem_cache_t *names_cachep; 1710 1711 /* SLAB cache for file structures */ 1712 kmem_cache_t *filp_cachep; 1713 1714 EXPORT_SYMBOL(d_genocide); 1715 1716 extern void bdev_cache_init(void); 1717 extern void chrdev_init(void); 1718 1719 void __init vfs_caches_init_early(void) 1720 { 1721 dcache_init_early(); 1722 inode_init_early(); 1723 } 1724 1725 void __init vfs_caches_init(unsigned long mempages) 1726 { 1727 unsigned long reserve; 1728 1729 /* Base hash sizes on available memory, with a reserve equal to 1730 150% of current kernel size */ 1731 1732 reserve = min((mempages - nr_free_pages()) * 3/2, mempages - 1); 1733 mempages -= reserve; 1734 1735 names_cachep = kmem_cache_create("names_cache", PATH_MAX, 0, 1736 SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL); 1737 1738 filp_cachep = kmem_cache_create("filp", sizeof(struct file), 0, 1739 SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL); 1740 1741 dcache_init(mempages); 1742 inode_init(mempages); 1743 files_init(mempages); 1744 mnt_init(mempages); 1745 bdev_cache_init(); 1746 chrdev_init(); 1747 } 1748 1749 EXPORT_SYMBOL(d_alloc); 1750 EXPORT_SYMBOL(d_alloc_anon); 1751 EXPORT_SYMBOL(d_alloc_root); 1752 EXPORT_SYMBOL(d_delete); 1753 EXPORT_SYMBOL(d_find_alias); 1754 EXPORT_SYMBOL(d_instantiate); 1755 EXPORT_SYMBOL(d_invalidate); 1756 EXPORT_SYMBOL(d_lookup); 1757 EXPORT_SYMBOL(d_move); 1758 EXPORT_SYMBOL(d_path); 1759 EXPORT_SYMBOL(d_prune_aliases); 1760 EXPORT_SYMBOL(d_rehash); 1761 EXPORT_SYMBOL(d_splice_alias); 1762 EXPORT_SYMBOL(d_validate); 1763 EXPORT_SYMBOL(dget_locked); 1764 EXPORT_SYMBOL(dput); 1765 EXPORT_SYMBOL(find_inode_number); 1766 EXPORT_SYMBOL(have_submounts); 1767 EXPORT_SYMBOL(names_cachep); 1768 EXPORT_SYMBOL(shrink_dcache_parent); 1769 EXPORT_SYMBOL(shrink_dcache_sb); 1770