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/syscalls.h> 18 #include <linux/string.h> 19 #include <linux/mm.h> 20 #include <linux/fs.h> 21 #include <linux/fsnotify.h> 22 #include <linux/slab.h> 23 #include <linux/init.h> 24 #include <linux/hash.h> 25 #include <linux/cache.h> 26 #include <linux/module.h> 27 #include <linux/mount.h> 28 #include <linux/file.h> 29 #include <asm/uaccess.h> 30 #include <linux/security.h> 31 #include <linux/seqlock.h> 32 #include <linux/swap.h> 33 #include <linux/bootmem.h> 34 #include <linux/fs_struct.h> 35 #include <linux/hardirq.h> 36 #include <linux/bit_spinlock.h> 37 #include <linux/rculist_bl.h> 38 #include <linux/prefetch.h> 39 #include "internal.h" 40 41 /* 42 * Usage: 43 * dcache->d_inode->i_lock protects: 44 * - i_dentry, d_alias, d_inode of aliases 45 * dcache_hash_bucket lock protects: 46 * - the dcache hash table 47 * s_anon bl list spinlock protects: 48 * - the s_anon list (see __d_drop) 49 * dcache_lru_lock protects: 50 * - the dcache lru lists and counters 51 * d_lock protects: 52 * - d_flags 53 * - d_name 54 * - d_lru 55 * - d_count 56 * - d_unhashed() 57 * - d_parent and d_subdirs 58 * - childrens' d_child and d_parent 59 * - d_alias, d_inode 60 * 61 * Ordering: 62 * dentry->d_inode->i_lock 63 * dentry->d_lock 64 * dcache_lru_lock 65 * dcache_hash_bucket lock 66 * s_anon lock 67 * 68 * If there is an ancestor relationship: 69 * dentry->d_parent->...->d_parent->d_lock 70 * ... 71 * dentry->d_parent->d_lock 72 * dentry->d_lock 73 * 74 * If no ancestor relationship: 75 * if (dentry1 < dentry2) 76 * dentry1->d_lock 77 * dentry2->d_lock 78 */ 79 int sysctl_vfs_cache_pressure __read_mostly = 100; 80 EXPORT_SYMBOL_GPL(sysctl_vfs_cache_pressure); 81 82 static __cacheline_aligned_in_smp DEFINE_SPINLOCK(dcache_lru_lock); 83 __cacheline_aligned_in_smp DEFINE_SEQLOCK(rename_lock); 84 85 EXPORT_SYMBOL(rename_lock); 86 87 static struct kmem_cache *dentry_cache __read_mostly; 88 89 /* 90 * This is the single most critical data structure when it comes 91 * to the dcache: the hashtable for lookups. Somebody should try 92 * to make this good - I've just made it work. 93 * 94 * This hash-function tries to avoid losing too many bits of hash 95 * information, yet avoid using a prime hash-size or similar. 96 */ 97 #define D_HASHBITS d_hash_shift 98 #define D_HASHMASK d_hash_mask 99 100 static unsigned int d_hash_mask __read_mostly; 101 static unsigned int d_hash_shift __read_mostly; 102 103 static struct hlist_bl_head *dentry_hashtable __read_mostly; 104 105 static inline struct hlist_bl_head *d_hash(struct dentry *parent, 106 unsigned long hash) 107 { 108 hash += ((unsigned long) parent ^ GOLDEN_RATIO_PRIME) / L1_CACHE_BYTES; 109 hash = hash ^ ((hash ^ GOLDEN_RATIO_PRIME) >> D_HASHBITS); 110 return dentry_hashtable + (hash & D_HASHMASK); 111 } 112 113 /* Statistics gathering. */ 114 struct dentry_stat_t dentry_stat = { 115 .age_limit = 45, 116 }; 117 118 static DEFINE_PER_CPU(unsigned int, nr_dentry); 119 120 #if defined(CONFIG_SYSCTL) && defined(CONFIG_PROC_FS) 121 static int get_nr_dentry(void) 122 { 123 int i; 124 int sum = 0; 125 for_each_possible_cpu(i) 126 sum += per_cpu(nr_dentry, i); 127 return sum < 0 ? 0 : sum; 128 } 129 130 int proc_nr_dentry(ctl_table *table, int write, void __user *buffer, 131 size_t *lenp, loff_t *ppos) 132 { 133 dentry_stat.nr_dentry = get_nr_dentry(); 134 return proc_dointvec(table, write, buffer, lenp, ppos); 135 } 136 #endif 137 138 static void __d_free(struct rcu_head *head) 139 { 140 struct dentry *dentry = container_of(head, struct dentry, d_u.d_rcu); 141 142 WARN_ON(!list_empty(&dentry->d_alias)); 143 if (dname_external(dentry)) 144 kfree(dentry->d_name.name); 145 kmem_cache_free(dentry_cache, dentry); 146 } 147 148 /* 149 * no locks, please. 150 */ 151 static void d_free(struct dentry *dentry) 152 { 153 BUG_ON(dentry->d_count); 154 this_cpu_dec(nr_dentry); 155 if (dentry->d_op && dentry->d_op->d_release) 156 dentry->d_op->d_release(dentry); 157 158 /* if dentry was never visible to RCU, immediate free is OK */ 159 if (!(dentry->d_flags & DCACHE_RCUACCESS)) 160 __d_free(&dentry->d_u.d_rcu); 161 else 162 call_rcu(&dentry->d_u.d_rcu, __d_free); 163 } 164 165 /** 166 * dentry_rcuwalk_barrier - invalidate in-progress rcu-walk lookups 167 * @dentry: the target dentry 168 * After this call, in-progress rcu-walk path lookup will fail. This 169 * should be called after unhashing, and after changing d_inode (if 170 * the dentry has not already been unhashed). 171 */ 172 static inline void dentry_rcuwalk_barrier(struct dentry *dentry) 173 { 174 assert_spin_locked(&dentry->d_lock); 175 /* Go through a barrier */ 176 write_seqcount_barrier(&dentry->d_seq); 177 } 178 179 /* 180 * Release the dentry's inode, using the filesystem 181 * d_iput() operation if defined. Dentry has no refcount 182 * and is unhashed. 183 */ 184 static void dentry_iput(struct dentry * dentry) 185 __releases(dentry->d_lock) 186 __releases(dentry->d_inode->i_lock) 187 { 188 struct inode *inode = dentry->d_inode; 189 if (inode) { 190 dentry->d_inode = NULL; 191 list_del_init(&dentry->d_alias); 192 spin_unlock(&dentry->d_lock); 193 spin_unlock(&inode->i_lock); 194 if (!inode->i_nlink) 195 fsnotify_inoderemove(inode); 196 if (dentry->d_op && dentry->d_op->d_iput) 197 dentry->d_op->d_iput(dentry, inode); 198 else 199 iput(inode); 200 } else { 201 spin_unlock(&dentry->d_lock); 202 } 203 } 204 205 /* 206 * Release the dentry's inode, using the filesystem 207 * d_iput() operation if defined. dentry remains in-use. 208 */ 209 static void dentry_unlink_inode(struct dentry * dentry) 210 __releases(dentry->d_lock) 211 __releases(dentry->d_inode->i_lock) 212 { 213 struct inode *inode = dentry->d_inode; 214 dentry->d_inode = NULL; 215 list_del_init(&dentry->d_alias); 216 dentry_rcuwalk_barrier(dentry); 217 spin_unlock(&dentry->d_lock); 218 spin_unlock(&inode->i_lock); 219 if (!inode->i_nlink) 220 fsnotify_inoderemove(inode); 221 if (dentry->d_op && dentry->d_op->d_iput) 222 dentry->d_op->d_iput(dentry, inode); 223 else 224 iput(inode); 225 } 226 227 /* 228 * dentry_lru_(add|del|move_tail) must be called with d_lock held. 229 */ 230 static void dentry_lru_add(struct dentry *dentry) 231 { 232 if (list_empty(&dentry->d_lru)) { 233 spin_lock(&dcache_lru_lock); 234 list_add(&dentry->d_lru, &dentry->d_sb->s_dentry_lru); 235 dentry->d_sb->s_nr_dentry_unused++; 236 dentry_stat.nr_unused++; 237 spin_unlock(&dcache_lru_lock); 238 } 239 } 240 241 static void __dentry_lru_del(struct dentry *dentry) 242 { 243 list_del_init(&dentry->d_lru); 244 dentry->d_sb->s_nr_dentry_unused--; 245 dentry_stat.nr_unused--; 246 } 247 248 static void dentry_lru_del(struct dentry *dentry) 249 { 250 if (!list_empty(&dentry->d_lru)) { 251 spin_lock(&dcache_lru_lock); 252 __dentry_lru_del(dentry); 253 spin_unlock(&dcache_lru_lock); 254 } 255 } 256 257 static void dentry_lru_move_tail(struct dentry *dentry) 258 { 259 spin_lock(&dcache_lru_lock); 260 if (list_empty(&dentry->d_lru)) { 261 list_add_tail(&dentry->d_lru, &dentry->d_sb->s_dentry_lru); 262 dentry->d_sb->s_nr_dentry_unused++; 263 dentry_stat.nr_unused++; 264 } else { 265 list_move_tail(&dentry->d_lru, &dentry->d_sb->s_dentry_lru); 266 } 267 spin_unlock(&dcache_lru_lock); 268 } 269 270 /** 271 * d_kill - kill dentry and return parent 272 * @dentry: dentry to kill 273 * @parent: parent dentry 274 * 275 * The dentry must already be unhashed and removed from the LRU. 276 * 277 * If this is the root of the dentry tree, return NULL. 278 * 279 * dentry->d_lock and parent->d_lock must be held by caller, and are dropped by 280 * d_kill. 281 */ 282 static struct dentry *d_kill(struct dentry *dentry, struct dentry *parent) 283 __releases(dentry->d_lock) 284 __releases(parent->d_lock) 285 __releases(dentry->d_inode->i_lock) 286 { 287 list_del(&dentry->d_u.d_child); 288 /* 289 * Inform try_to_ascend() that we are no longer attached to the 290 * dentry tree 291 */ 292 dentry->d_flags |= DCACHE_DISCONNECTED; 293 if (parent) 294 spin_unlock(&parent->d_lock); 295 dentry_iput(dentry); 296 /* 297 * dentry_iput drops the locks, at which point nobody (except 298 * transient RCU lookups) can reach this dentry. 299 */ 300 d_free(dentry); 301 return parent; 302 } 303 304 /** 305 * d_drop - drop a dentry 306 * @dentry: dentry to drop 307 * 308 * d_drop() unhashes the entry from the parent dentry hashes, so that it won't 309 * be found through a VFS lookup any more. Note that this is different from 310 * deleting the dentry - d_delete will try to mark the dentry negative if 311 * possible, giving a successful _negative_ lookup, while d_drop will 312 * just make the cache lookup fail. 313 * 314 * d_drop() is used mainly for stuff that wants to invalidate a dentry for some 315 * reason (NFS timeouts or autofs deletes). 316 * 317 * __d_drop requires dentry->d_lock. 318 */ 319 void __d_drop(struct dentry *dentry) 320 { 321 if (!d_unhashed(dentry)) { 322 struct hlist_bl_head *b; 323 if (unlikely(dentry->d_flags & DCACHE_DISCONNECTED)) 324 b = &dentry->d_sb->s_anon; 325 else 326 b = d_hash(dentry->d_parent, dentry->d_name.hash); 327 328 hlist_bl_lock(b); 329 __hlist_bl_del(&dentry->d_hash); 330 dentry->d_hash.pprev = NULL; 331 hlist_bl_unlock(b); 332 333 dentry_rcuwalk_barrier(dentry); 334 } 335 } 336 EXPORT_SYMBOL(__d_drop); 337 338 void d_drop(struct dentry *dentry) 339 { 340 spin_lock(&dentry->d_lock); 341 __d_drop(dentry); 342 spin_unlock(&dentry->d_lock); 343 } 344 EXPORT_SYMBOL(d_drop); 345 346 /* 347 * d_clear_need_lookup - drop a dentry from cache and clear the need lookup flag 348 * @dentry: dentry to drop 349 * 350 * This is called when we do a lookup on a placeholder dentry that needed to be 351 * looked up. The dentry should have been hashed in order for it to be found by 352 * the lookup code, but now needs to be unhashed while we do the actual lookup 353 * and clear the DCACHE_NEED_LOOKUP flag. 354 */ 355 void d_clear_need_lookup(struct dentry *dentry) 356 { 357 spin_lock(&dentry->d_lock); 358 __d_drop(dentry); 359 dentry->d_flags &= ~DCACHE_NEED_LOOKUP; 360 spin_unlock(&dentry->d_lock); 361 } 362 EXPORT_SYMBOL(d_clear_need_lookup); 363 364 /* 365 * Finish off a dentry we've decided to kill. 366 * dentry->d_lock must be held, returns with it unlocked. 367 * If ref is non-zero, then decrement the refcount too. 368 * Returns dentry requiring refcount drop, or NULL if we're done. 369 */ 370 static inline struct dentry *dentry_kill(struct dentry *dentry, int ref) 371 __releases(dentry->d_lock) 372 { 373 struct inode *inode; 374 struct dentry *parent; 375 376 inode = dentry->d_inode; 377 if (inode && !spin_trylock(&inode->i_lock)) { 378 relock: 379 spin_unlock(&dentry->d_lock); 380 cpu_relax(); 381 return dentry; /* try again with same dentry */ 382 } 383 if (IS_ROOT(dentry)) 384 parent = NULL; 385 else 386 parent = dentry->d_parent; 387 if (parent && !spin_trylock(&parent->d_lock)) { 388 if (inode) 389 spin_unlock(&inode->i_lock); 390 goto relock; 391 } 392 393 if (ref) 394 dentry->d_count--; 395 /* if dentry was on the d_lru list delete it from there */ 396 dentry_lru_del(dentry); 397 /* if it was on the hash then remove it */ 398 __d_drop(dentry); 399 return d_kill(dentry, parent); 400 } 401 402 /* 403 * This is dput 404 * 405 * This is complicated by the fact that we do not want to put 406 * dentries that are no longer on any hash chain on the unused 407 * list: we'd much rather just get rid of them immediately. 408 * 409 * However, that implies that we have to traverse the dentry 410 * tree upwards to the parents which might _also_ now be 411 * scheduled for deletion (it may have been only waiting for 412 * its last child to go away). 413 * 414 * This tail recursion is done by hand as we don't want to depend 415 * on the compiler to always get this right (gcc generally doesn't). 416 * Real recursion would eat up our stack space. 417 */ 418 419 /* 420 * dput - release a dentry 421 * @dentry: dentry to release 422 * 423 * Release a dentry. This will drop the usage count and if appropriate 424 * call the dentry unlink method as well as removing it from the queues and 425 * releasing its resources. If the parent dentries were scheduled for release 426 * they too may now get deleted. 427 */ 428 void dput(struct dentry *dentry) 429 { 430 if (!dentry) 431 return; 432 433 repeat: 434 if (dentry->d_count == 1) 435 might_sleep(); 436 spin_lock(&dentry->d_lock); 437 BUG_ON(!dentry->d_count); 438 if (dentry->d_count > 1) { 439 dentry->d_count--; 440 spin_unlock(&dentry->d_lock); 441 return; 442 } 443 444 if (dentry->d_flags & DCACHE_OP_DELETE) { 445 if (dentry->d_op->d_delete(dentry)) 446 goto kill_it; 447 } 448 449 /* Unreachable? Get rid of it */ 450 if (d_unhashed(dentry)) 451 goto kill_it; 452 453 /* 454 * If this dentry needs lookup, don't set the referenced flag so that it 455 * is more likely to be cleaned up by the dcache shrinker in case of 456 * memory pressure. 457 */ 458 if (!d_need_lookup(dentry)) 459 dentry->d_flags |= DCACHE_REFERENCED; 460 dentry_lru_add(dentry); 461 462 dentry->d_count--; 463 spin_unlock(&dentry->d_lock); 464 return; 465 466 kill_it: 467 dentry = dentry_kill(dentry, 1); 468 if (dentry) 469 goto repeat; 470 } 471 EXPORT_SYMBOL(dput); 472 473 /** 474 * d_invalidate - invalidate a dentry 475 * @dentry: dentry to invalidate 476 * 477 * Try to invalidate the dentry if it turns out to be 478 * possible. If there are other dentries that can be 479 * reached through this one we can't delete it and we 480 * return -EBUSY. On success we return 0. 481 * 482 * no dcache lock. 483 */ 484 485 int d_invalidate(struct dentry * dentry) 486 { 487 /* 488 * If it's already been dropped, return OK. 489 */ 490 spin_lock(&dentry->d_lock); 491 if (d_unhashed(dentry)) { 492 spin_unlock(&dentry->d_lock); 493 return 0; 494 } 495 /* 496 * Check whether to do a partial shrink_dcache 497 * to get rid of unused child entries. 498 */ 499 if (!list_empty(&dentry->d_subdirs)) { 500 spin_unlock(&dentry->d_lock); 501 shrink_dcache_parent(dentry); 502 spin_lock(&dentry->d_lock); 503 } 504 505 /* 506 * Somebody else still using it? 507 * 508 * If it's a directory, we can't drop it 509 * for fear of somebody re-populating it 510 * with children (even though dropping it 511 * would make it unreachable from the root, 512 * we might still populate it if it was a 513 * working directory or similar). 514 */ 515 if (dentry->d_count > 1) { 516 if (dentry->d_inode && S_ISDIR(dentry->d_inode->i_mode)) { 517 spin_unlock(&dentry->d_lock); 518 return -EBUSY; 519 } 520 } 521 522 __d_drop(dentry); 523 spin_unlock(&dentry->d_lock); 524 return 0; 525 } 526 EXPORT_SYMBOL(d_invalidate); 527 528 /* This must be called with d_lock held */ 529 static inline void __dget_dlock(struct dentry *dentry) 530 { 531 dentry->d_count++; 532 } 533 534 static inline void __dget(struct dentry *dentry) 535 { 536 spin_lock(&dentry->d_lock); 537 __dget_dlock(dentry); 538 spin_unlock(&dentry->d_lock); 539 } 540 541 struct dentry *dget_parent(struct dentry *dentry) 542 { 543 struct dentry *ret; 544 545 repeat: 546 /* 547 * Don't need rcu_dereference because we re-check it was correct under 548 * the lock. 549 */ 550 rcu_read_lock(); 551 ret = dentry->d_parent; 552 spin_lock(&ret->d_lock); 553 if (unlikely(ret != dentry->d_parent)) { 554 spin_unlock(&ret->d_lock); 555 rcu_read_unlock(); 556 goto repeat; 557 } 558 rcu_read_unlock(); 559 BUG_ON(!ret->d_count); 560 ret->d_count++; 561 spin_unlock(&ret->d_lock); 562 return ret; 563 } 564 EXPORT_SYMBOL(dget_parent); 565 566 /** 567 * d_find_alias - grab a hashed alias of inode 568 * @inode: inode in question 569 * @want_discon: flag, used by d_splice_alias, to request 570 * that only a DISCONNECTED alias be returned. 571 * 572 * If inode has a hashed alias, or is a directory and has any alias, 573 * acquire the reference to alias and return it. Otherwise return NULL. 574 * Notice that if inode is a directory there can be only one alias and 575 * it can be unhashed only if it has no children, or if it is the root 576 * of a filesystem. 577 * 578 * If the inode has an IS_ROOT, DCACHE_DISCONNECTED alias, then prefer 579 * any other hashed alias over that one unless @want_discon is set, 580 * in which case only return an IS_ROOT, DCACHE_DISCONNECTED alias. 581 */ 582 static struct dentry *__d_find_alias(struct inode *inode, int want_discon) 583 { 584 struct dentry *alias, *discon_alias; 585 586 again: 587 discon_alias = NULL; 588 list_for_each_entry(alias, &inode->i_dentry, d_alias) { 589 spin_lock(&alias->d_lock); 590 if (S_ISDIR(inode->i_mode) || !d_unhashed(alias)) { 591 if (IS_ROOT(alias) && 592 (alias->d_flags & DCACHE_DISCONNECTED)) { 593 discon_alias = alias; 594 } else if (!want_discon) { 595 __dget_dlock(alias); 596 spin_unlock(&alias->d_lock); 597 return alias; 598 } 599 } 600 spin_unlock(&alias->d_lock); 601 } 602 if (discon_alias) { 603 alias = discon_alias; 604 spin_lock(&alias->d_lock); 605 if (S_ISDIR(inode->i_mode) || !d_unhashed(alias)) { 606 if (IS_ROOT(alias) && 607 (alias->d_flags & DCACHE_DISCONNECTED)) { 608 __dget_dlock(alias); 609 spin_unlock(&alias->d_lock); 610 return alias; 611 } 612 } 613 spin_unlock(&alias->d_lock); 614 goto again; 615 } 616 return NULL; 617 } 618 619 struct dentry *d_find_alias(struct inode *inode) 620 { 621 struct dentry *de = NULL; 622 623 if (!list_empty(&inode->i_dentry)) { 624 spin_lock(&inode->i_lock); 625 de = __d_find_alias(inode, 0); 626 spin_unlock(&inode->i_lock); 627 } 628 return de; 629 } 630 EXPORT_SYMBOL(d_find_alias); 631 632 /* 633 * Try to kill dentries associated with this inode. 634 * WARNING: you must own a reference to inode. 635 */ 636 void d_prune_aliases(struct inode *inode) 637 { 638 struct dentry *dentry; 639 restart: 640 spin_lock(&inode->i_lock); 641 list_for_each_entry(dentry, &inode->i_dentry, d_alias) { 642 spin_lock(&dentry->d_lock); 643 if (!dentry->d_count) { 644 __dget_dlock(dentry); 645 __d_drop(dentry); 646 spin_unlock(&dentry->d_lock); 647 spin_unlock(&inode->i_lock); 648 dput(dentry); 649 goto restart; 650 } 651 spin_unlock(&dentry->d_lock); 652 } 653 spin_unlock(&inode->i_lock); 654 } 655 EXPORT_SYMBOL(d_prune_aliases); 656 657 /* 658 * Try to throw away a dentry - free the inode, dput the parent. 659 * Requires dentry->d_lock is held, and dentry->d_count == 0. 660 * Releases dentry->d_lock. 661 * 662 * This may fail if locks cannot be acquired no problem, just try again. 663 */ 664 static void try_prune_one_dentry(struct dentry *dentry) 665 __releases(dentry->d_lock) 666 { 667 struct dentry *parent; 668 669 parent = dentry_kill(dentry, 0); 670 /* 671 * If dentry_kill returns NULL, we have nothing more to do. 672 * if it returns the same dentry, trylocks failed. In either 673 * case, just loop again. 674 * 675 * Otherwise, we need to prune ancestors too. This is necessary 676 * to prevent quadratic behavior of shrink_dcache_parent(), but 677 * is also expected to be beneficial in reducing dentry cache 678 * fragmentation. 679 */ 680 if (!parent) 681 return; 682 if (parent == dentry) 683 return; 684 685 /* Prune ancestors. */ 686 dentry = parent; 687 while (dentry) { 688 spin_lock(&dentry->d_lock); 689 if (dentry->d_count > 1) { 690 dentry->d_count--; 691 spin_unlock(&dentry->d_lock); 692 return; 693 } 694 dentry = dentry_kill(dentry, 1); 695 } 696 } 697 698 static void shrink_dentry_list(struct list_head *list) 699 { 700 struct dentry *dentry; 701 702 rcu_read_lock(); 703 for (;;) { 704 dentry = list_entry_rcu(list->prev, struct dentry, d_lru); 705 if (&dentry->d_lru == list) 706 break; /* empty */ 707 spin_lock(&dentry->d_lock); 708 if (dentry != list_entry(list->prev, struct dentry, d_lru)) { 709 spin_unlock(&dentry->d_lock); 710 continue; 711 } 712 713 /* 714 * We found an inuse dentry which was not removed from 715 * the LRU because of laziness during lookup. Do not free 716 * it - just keep it off the LRU list. 717 */ 718 if (dentry->d_count) { 719 dentry_lru_del(dentry); 720 spin_unlock(&dentry->d_lock); 721 continue; 722 } 723 724 rcu_read_unlock(); 725 726 try_prune_one_dentry(dentry); 727 728 rcu_read_lock(); 729 } 730 rcu_read_unlock(); 731 } 732 733 /** 734 * __shrink_dcache_sb - shrink the dentry LRU on a given superblock 735 * @sb: superblock to shrink dentry LRU. 736 * @count: number of entries to prune 737 * @flags: flags to control the dentry processing 738 * 739 * If flags contains DCACHE_REFERENCED reference dentries will not be pruned. 740 */ 741 static void __shrink_dcache_sb(struct super_block *sb, int count, int flags) 742 { 743 struct dentry *dentry; 744 LIST_HEAD(referenced); 745 LIST_HEAD(tmp); 746 747 relock: 748 spin_lock(&dcache_lru_lock); 749 while (!list_empty(&sb->s_dentry_lru)) { 750 dentry = list_entry(sb->s_dentry_lru.prev, 751 struct dentry, d_lru); 752 BUG_ON(dentry->d_sb != sb); 753 754 if (!spin_trylock(&dentry->d_lock)) { 755 spin_unlock(&dcache_lru_lock); 756 cpu_relax(); 757 goto relock; 758 } 759 760 /* 761 * If we are honouring the DCACHE_REFERENCED flag and the 762 * dentry has this flag set, don't free it. Clear the flag 763 * and put it back on the LRU. 764 */ 765 if (flags & DCACHE_REFERENCED && 766 dentry->d_flags & DCACHE_REFERENCED) { 767 dentry->d_flags &= ~DCACHE_REFERENCED; 768 list_move(&dentry->d_lru, &referenced); 769 spin_unlock(&dentry->d_lock); 770 } else { 771 list_move_tail(&dentry->d_lru, &tmp); 772 spin_unlock(&dentry->d_lock); 773 if (!--count) 774 break; 775 } 776 cond_resched_lock(&dcache_lru_lock); 777 } 778 if (!list_empty(&referenced)) 779 list_splice(&referenced, &sb->s_dentry_lru); 780 spin_unlock(&dcache_lru_lock); 781 782 shrink_dentry_list(&tmp); 783 } 784 785 /** 786 * prune_dcache_sb - shrink the dcache 787 * @nr_to_scan: number of entries to try to free 788 * 789 * Attempt to shrink the superblock dcache LRU by @nr_to_scan entries. This is 790 * done when we need more memory an called from the superblock shrinker 791 * function. 792 * 793 * This function may fail to free any resources if all the dentries are in 794 * use. 795 */ 796 void prune_dcache_sb(struct super_block *sb, int nr_to_scan) 797 { 798 __shrink_dcache_sb(sb, nr_to_scan, DCACHE_REFERENCED); 799 } 800 801 /** 802 * shrink_dcache_sb - shrink dcache for a superblock 803 * @sb: superblock 804 * 805 * Shrink the dcache for the specified super block. This is used to free 806 * the dcache before unmounting a file system. 807 */ 808 void shrink_dcache_sb(struct super_block *sb) 809 { 810 LIST_HEAD(tmp); 811 812 spin_lock(&dcache_lru_lock); 813 while (!list_empty(&sb->s_dentry_lru)) { 814 list_splice_init(&sb->s_dentry_lru, &tmp); 815 spin_unlock(&dcache_lru_lock); 816 shrink_dentry_list(&tmp); 817 spin_lock(&dcache_lru_lock); 818 } 819 spin_unlock(&dcache_lru_lock); 820 } 821 EXPORT_SYMBOL(shrink_dcache_sb); 822 823 /* 824 * destroy a single subtree of dentries for unmount 825 * - see the comments on shrink_dcache_for_umount() for a description of the 826 * locking 827 */ 828 static void shrink_dcache_for_umount_subtree(struct dentry *dentry) 829 { 830 struct dentry *parent; 831 unsigned detached = 0; 832 833 BUG_ON(!IS_ROOT(dentry)); 834 835 /* detach this root from the system */ 836 spin_lock(&dentry->d_lock); 837 dentry_lru_del(dentry); 838 __d_drop(dentry); 839 spin_unlock(&dentry->d_lock); 840 841 for (;;) { 842 /* descend to the first leaf in the current subtree */ 843 while (!list_empty(&dentry->d_subdirs)) { 844 struct dentry *loop; 845 846 /* this is a branch with children - detach all of them 847 * from the system in one go */ 848 spin_lock(&dentry->d_lock); 849 list_for_each_entry(loop, &dentry->d_subdirs, 850 d_u.d_child) { 851 spin_lock_nested(&loop->d_lock, 852 DENTRY_D_LOCK_NESTED); 853 dentry_lru_del(loop); 854 __d_drop(loop); 855 spin_unlock(&loop->d_lock); 856 } 857 spin_unlock(&dentry->d_lock); 858 859 /* move to the first child */ 860 dentry = list_entry(dentry->d_subdirs.next, 861 struct dentry, d_u.d_child); 862 } 863 864 /* consume the dentries from this leaf up through its parents 865 * until we find one with children or run out altogether */ 866 do { 867 struct inode *inode; 868 869 if (dentry->d_count != 0) { 870 printk(KERN_ERR 871 "BUG: Dentry %p{i=%lx,n=%s}" 872 " still in use (%d)" 873 " [unmount of %s %s]\n", 874 dentry, 875 dentry->d_inode ? 876 dentry->d_inode->i_ino : 0UL, 877 dentry->d_name.name, 878 dentry->d_count, 879 dentry->d_sb->s_type->name, 880 dentry->d_sb->s_id); 881 BUG(); 882 } 883 884 if (IS_ROOT(dentry)) { 885 parent = NULL; 886 list_del(&dentry->d_u.d_child); 887 } else { 888 parent = dentry->d_parent; 889 spin_lock(&parent->d_lock); 890 parent->d_count--; 891 list_del(&dentry->d_u.d_child); 892 spin_unlock(&parent->d_lock); 893 } 894 895 detached++; 896 897 inode = dentry->d_inode; 898 if (inode) { 899 dentry->d_inode = NULL; 900 list_del_init(&dentry->d_alias); 901 if (dentry->d_op && dentry->d_op->d_iput) 902 dentry->d_op->d_iput(dentry, inode); 903 else 904 iput(inode); 905 } 906 907 d_free(dentry); 908 909 /* finished when we fall off the top of the tree, 910 * otherwise we ascend to the parent and move to the 911 * next sibling if there is one */ 912 if (!parent) 913 return; 914 dentry = parent; 915 } while (list_empty(&dentry->d_subdirs)); 916 917 dentry = list_entry(dentry->d_subdirs.next, 918 struct dentry, d_u.d_child); 919 } 920 } 921 922 /* 923 * destroy the dentries attached to a superblock on unmounting 924 * - we don't need to use dentry->d_lock because: 925 * - the superblock is detached from all mountings and open files, so the 926 * dentry trees will not be rearranged by the VFS 927 * - s_umount is write-locked, so the memory pressure shrinker will ignore 928 * any dentries belonging to this superblock that it comes across 929 * - the filesystem itself is no longer permitted to rearrange the dentries 930 * in this superblock 931 */ 932 void shrink_dcache_for_umount(struct super_block *sb) 933 { 934 struct dentry *dentry; 935 936 if (down_read_trylock(&sb->s_umount)) 937 BUG(); 938 939 dentry = sb->s_root; 940 sb->s_root = NULL; 941 spin_lock(&dentry->d_lock); 942 dentry->d_count--; 943 spin_unlock(&dentry->d_lock); 944 shrink_dcache_for_umount_subtree(dentry); 945 946 while (!hlist_bl_empty(&sb->s_anon)) { 947 dentry = hlist_bl_entry(hlist_bl_first(&sb->s_anon), struct dentry, d_hash); 948 shrink_dcache_for_umount_subtree(dentry); 949 } 950 } 951 952 /* 953 * This tries to ascend one level of parenthood, but 954 * we can race with renaming, so we need to re-check 955 * the parenthood after dropping the lock and check 956 * that the sequence number still matches. 957 */ 958 static struct dentry *try_to_ascend(struct dentry *old, int locked, unsigned seq) 959 { 960 struct dentry *new = old->d_parent; 961 962 rcu_read_lock(); 963 spin_unlock(&old->d_lock); 964 spin_lock(&new->d_lock); 965 966 /* 967 * might go back up the wrong parent if we have had a rename 968 * or deletion 969 */ 970 if (new != old->d_parent || 971 (old->d_flags & DCACHE_DISCONNECTED) || 972 (!locked && read_seqretry(&rename_lock, seq))) { 973 spin_unlock(&new->d_lock); 974 new = NULL; 975 } 976 rcu_read_unlock(); 977 return new; 978 } 979 980 981 /* 982 * Search for at least 1 mount point in the dentry's subdirs. 983 * We descend to the next level whenever the d_subdirs 984 * list is non-empty and continue searching. 985 */ 986 987 /** 988 * have_submounts - check for mounts over a dentry 989 * @parent: dentry to check. 990 * 991 * Return true if the parent or its subdirectories contain 992 * a mount point 993 */ 994 int have_submounts(struct dentry *parent) 995 { 996 struct dentry *this_parent; 997 struct list_head *next; 998 unsigned seq; 999 int locked = 0; 1000 1001 seq = read_seqbegin(&rename_lock); 1002 again: 1003 this_parent = parent; 1004 1005 if (d_mountpoint(parent)) 1006 goto positive; 1007 spin_lock(&this_parent->d_lock); 1008 repeat: 1009 next = this_parent->d_subdirs.next; 1010 resume: 1011 while (next != &this_parent->d_subdirs) { 1012 struct list_head *tmp = next; 1013 struct dentry *dentry = list_entry(tmp, struct dentry, d_u.d_child); 1014 next = tmp->next; 1015 1016 spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED); 1017 /* Have we found a mount point ? */ 1018 if (d_mountpoint(dentry)) { 1019 spin_unlock(&dentry->d_lock); 1020 spin_unlock(&this_parent->d_lock); 1021 goto positive; 1022 } 1023 if (!list_empty(&dentry->d_subdirs)) { 1024 spin_unlock(&this_parent->d_lock); 1025 spin_release(&dentry->d_lock.dep_map, 1, _RET_IP_); 1026 this_parent = dentry; 1027 spin_acquire(&this_parent->d_lock.dep_map, 0, 1, _RET_IP_); 1028 goto repeat; 1029 } 1030 spin_unlock(&dentry->d_lock); 1031 } 1032 /* 1033 * All done at this level ... ascend and resume the search. 1034 */ 1035 if (this_parent != parent) { 1036 struct dentry *child = this_parent; 1037 this_parent = try_to_ascend(this_parent, locked, seq); 1038 if (!this_parent) 1039 goto rename_retry; 1040 next = child->d_u.d_child.next; 1041 goto resume; 1042 } 1043 spin_unlock(&this_parent->d_lock); 1044 if (!locked && read_seqretry(&rename_lock, seq)) 1045 goto rename_retry; 1046 if (locked) 1047 write_sequnlock(&rename_lock); 1048 return 0; /* No mount points found in tree */ 1049 positive: 1050 if (!locked && read_seqretry(&rename_lock, seq)) 1051 goto rename_retry; 1052 if (locked) 1053 write_sequnlock(&rename_lock); 1054 return 1; 1055 1056 rename_retry: 1057 locked = 1; 1058 write_seqlock(&rename_lock); 1059 goto again; 1060 } 1061 EXPORT_SYMBOL(have_submounts); 1062 1063 /* 1064 * Search the dentry child list for the specified parent, 1065 * and move any unused dentries to the end of the unused 1066 * list for prune_dcache(). We descend to the next level 1067 * whenever the d_subdirs list is non-empty and continue 1068 * searching. 1069 * 1070 * It returns zero iff there are no unused children, 1071 * otherwise it returns the number of children moved to 1072 * the end of the unused list. This may not be the total 1073 * number of unused children, because select_parent can 1074 * drop the lock and return early due to latency 1075 * constraints. 1076 */ 1077 static int select_parent(struct dentry * parent) 1078 { 1079 struct dentry *this_parent; 1080 struct list_head *next; 1081 unsigned seq; 1082 int found = 0; 1083 int locked = 0; 1084 1085 seq = read_seqbegin(&rename_lock); 1086 again: 1087 this_parent = parent; 1088 spin_lock(&this_parent->d_lock); 1089 repeat: 1090 next = this_parent->d_subdirs.next; 1091 resume: 1092 while (next != &this_parent->d_subdirs) { 1093 struct list_head *tmp = next; 1094 struct dentry *dentry = list_entry(tmp, struct dentry, d_u.d_child); 1095 next = tmp->next; 1096 1097 spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED); 1098 1099 /* 1100 * move only zero ref count dentries to the end 1101 * of the unused list for prune_dcache 1102 */ 1103 if (!dentry->d_count) { 1104 dentry_lru_move_tail(dentry); 1105 found++; 1106 } else { 1107 dentry_lru_del(dentry); 1108 } 1109 1110 /* 1111 * We can return to the caller if we have found some (this 1112 * ensures forward progress). We'll be coming back to find 1113 * the rest. 1114 */ 1115 if (found && need_resched()) { 1116 spin_unlock(&dentry->d_lock); 1117 goto out; 1118 } 1119 1120 /* 1121 * Descend a level if the d_subdirs list is non-empty. 1122 */ 1123 if (!list_empty(&dentry->d_subdirs)) { 1124 spin_unlock(&this_parent->d_lock); 1125 spin_release(&dentry->d_lock.dep_map, 1, _RET_IP_); 1126 this_parent = dentry; 1127 spin_acquire(&this_parent->d_lock.dep_map, 0, 1, _RET_IP_); 1128 goto repeat; 1129 } 1130 1131 spin_unlock(&dentry->d_lock); 1132 } 1133 /* 1134 * All done at this level ... ascend and resume the search. 1135 */ 1136 if (this_parent != parent) { 1137 struct dentry *child = this_parent; 1138 this_parent = try_to_ascend(this_parent, locked, seq); 1139 if (!this_parent) 1140 goto rename_retry; 1141 next = child->d_u.d_child.next; 1142 goto resume; 1143 } 1144 out: 1145 spin_unlock(&this_parent->d_lock); 1146 if (!locked && read_seqretry(&rename_lock, seq)) 1147 goto rename_retry; 1148 if (locked) 1149 write_sequnlock(&rename_lock); 1150 return found; 1151 1152 rename_retry: 1153 if (found) 1154 return found; 1155 locked = 1; 1156 write_seqlock(&rename_lock); 1157 goto again; 1158 } 1159 1160 /** 1161 * shrink_dcache_parent - prune dcache 1162 * @parent: parent of entries to prune 1163 * 1164 * Prune the dcache to remove unused children of the parent dentry. 1165 */ 1166 1167 void shrink_dcache_parent(struct dentry * parent) 1168 { 1169 struct super_block *sb = parent->d_sb; 1170 int found; 1171 1172 while ((found = select_parent(parent)) != 0) 1173 __shrink_dcache_sb(sb, found, 0); 1174 } 1175 EXPORT_SYMBOL(shrink_dcache_parent); 1176 1177 /** 1178 * __d_alloc - allocate a dcache entry 1179 * @sb: filesystem it will belong to 1180 * @name: qstr of the name 1181 * 1182 * Allocates a dentry. It returns %NULL if there is insufficient memory 1183 * available. On a success the dentry is returned. The name passed in is 1184 * copied and the copy passed in may be reused after this call. 1185 */ 1186 1187 struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name) 1188 { 1189 struct dentry *dentry; 1190 char *dname; 1191 1192 dentry = kmem_cache_alloc(dentry_cache, GFP_KERNEL); 1193 if (!dentry) 1194 return NULL; 1195 1196 if (name->len > DNAME_INLINE_LEN-1) { 1197 dname = kmalloc(name->len + 1, GFP_KERNEL); 1198 if (!dname) { 1199 kmem_cache_free(dentry_cache, dentry); 1200 return NULL; 1201 } 1202 } else { 1203 dname = dentry->d_iname; 1204 } 1205 dentry->d_name.name = dname; 1206 1207 dentry->d_name.len = name->len; 1208 dentry->d_name.hash = name->hash; 1209 memcpy(dname, name->name, name->len); 1210 dname[name->len] = 0; 1211 1212 dentry->d_count = 1; 1213 dentry->d_flags = 0; 1214 spin_lock_init(&dentry->d_lock); 1215 seqcount_init(&dentry->d_seq); 1216 dentry->d_inode = NULL; 1217 dentry->d_parent = dentry; 1218 dentry->d_sb = sb; 1219 dentry->d_op = NULL; 1220 dentry->d_fsdata = NULL; 1221 INIT_HLIST_BL_NODE(&dentry->d_hash); 1222 INIT_LIST_HEAD(&dentry->d_lru); 1223 INIT_LIST_HEAD(&dentry->d_subdirs); 1224 INIT_LIST_HEAD(&dentry->d_alias); 1225 INIT_LIST_HEAD(&dentry->d_u.d_child); 1226 d_set_d_op(dentry, dentry->d_sb->s_d_op); 1227 1228 this_cpu_inc(nr_dentry); 1229 1230 return dentry; 1231 } 1232 1233 /** 1234 * d_alloc - allocate a dcache entry 1235 * @parent: parent of entry to allocate 1236 * @name: qstr of the name 1237 * 1238 * Allocates a dentry. It returns %NULL if there is insufficient memory 1239 * available. On a success the dentry is returned. The name passed in is 1240 * copied and the copy passed in may be reused after this call. 1241 */ 1242 struct dentry *d_alloc(struct dentry * parent, const struct qstr *name) 1243 { 1244 struct dentry *dentry = __d_alloc(parent->d_sb, name); 1245 if (!dentry) 1246 return NULL; 1247 1248 spin_lock(&parent->d_lock); 1249 /* 1250 * don't need child lock because it is not subject 1251 * to concurrency here 1252 */ 1253 __dget_dlock(parent); 1254 dentry->d_parent = parent; 1255 list_add(&dentry->d_u.d_child, &parent->d_subdirs); 1256 spin_unlock(&parent->d_lock); 1257 1258 return dentry; 1259 } 1260 EXPORT_SYMBOL(d_alloc); 1261 1262 struct dentry *d_alloc_pseudo(struct super_block *sb, const struct qstr *name) 1263 { 1264 struct dentry *dentry = __d_alloc(sb, name); 1265 if (dentry) 1266 dentry->d_flags |= DCACHE_DISCONNECTED; 1267 return dentry; 1268 } 1269 EXPORT_SYMBOL(d_alloc_pseudo); 1270 1271 struct dentry *d_alloc_name(struct dentry *parent, const char *name) 1272 { 1273 struct qstr q; 1274 1275 q.name = name; 1276 q.len = strlen(name); 1277 q.hash = full_name_hash(q.name, q.len); 1278 return d_alloc(parent, &q); 1279 } 1280 EXPORT_SYMBOL(d_alloc_name); 1281 1282 void d_set_d_op(struct dentry *dentry, const struct dentry_operations *op) 1283 { 1284 WARN_ON_ONCE(dentry->d_op); 1285 WARN_ON_ONCE(dentry->d_flags & (DCACHE_OP_HASH | 1286 DCACHE_OP_COMPARE | 1287 DCACHE_OP_REVALIDATE | 1288 DCACHE_OP_DELETE )); 1289 dentry->d_op = op; 1290 if (!op) 1291 return; 1292 if (op->d_hash) 1293 dentry->d_flags |= DCACHE_OP_HASH; 1294 if (op->d_compare) 1295 dentry->d_flags |= DCACHE_OP_COMPARE; 1296 if (op->d_revalidate) 1297 dentry->d_flags |= DCACHE_OP_REVALIDATE; 1298 if (op->d_delete) 1299 dentry->d_flags |= DCACHE_OP_DELETE; 1300 1301 } 1302 EXPORT_SYMBOL(d_set_d_op); 1303 1304 static void __d_instantiate(struct dentry *dentry, struct inode *inode) 1305 { 1306 spin_lock(&dentry->d_lock); 1307 if (inode) { 1308 if (unlikely(IS_AUTOMOUNT(inode))) 1309 dentry->d_flags |= DCACHE_NEED_AUTOMOUNT; 1310 list_add(&dentry->d_alias, &inode->i_dentry); 1311 } 1312 dentry->d_inode = inode; 1313 dentry_rcuwalk_barrier(dentry); 1314 spin_unlock(&dentry->d_lock); 1315 fsnotify_d_instantiate(dentry, inode); 1316 } 1317 1318 /** 1319 * d_instantiate - fill in inode information for a dentry 1320 * @entry: dentry to complete 1321 * @inode: inode to attach to this dentry 1322 * 1323 * Fill in inode information in the entry. 1324 * 1325 * This turns negative dentries into productive full members 1326 * of society. 1327 * 1328 * NOTE! This assumes that the inode count has been incremented 1329 * (or otherwise set) by the caller to indicate that it is now 1330 * in use by the dcache. 1331 */ 1332 1333 void d_instantiate(struct dentry *entry, struct inode * inode) 1334 { 1335 BUG_ON(!list_empty(&entry->d_alias)); 1336 if (inode) 1337 spin_lock(&inode->i_lock); 1338 __d_instantiate(entry, inode); 1339 if (inode) 1340 spin_unlock(&inode->i_lock); 1341 security_d_instantiate(entry, inode); 1342 } 1343 EXPORT_SYMBOL(d_instantiate); 1344 1345 /** 1346 * d_instantiate_unique - instantiate a non-aliased dentry 1347 * @entry: dentry to instantiate 1348 * @inode: inode to attach to this dentry 1349 * 1350 * Fill in inode information in the entry. On success, it returns NULL. 1351 * If an unhashed alias of "entry" already exists, then we return the 1352 * aliased dentry instead and drop one reference to inode. 1353 * 1354 * Note that in order to avoid conflicts with rename() etc, the caller 1355 * had better be holding the parent directory semaphore. 1356 * 1357 * This also assumes that the inode count has been incremented 1358 * (or otherwise set) by the caller to indicate that it is now 1359 * in use by the dcache. 1360 */ 1361 static struct dentry *__d_instantiate_unique(struct dentry *entry, 1362 struct inode *inode) 1363 { 1364 struct dentry *alias; 1365 int len = entry->d_name.len; 1366 const char *name = entry->d_name.name; 1367 unsigned int hash = entry->d_name.hash; 1368 1369 if (!inode) { 1370 __d_instantiate(entry, NULL); 1371 return NULL; 1372 } 1373 1374 list_for_each_entry(alias, &inode->i_dentry, d_alias) { 1375 struct qstr *qstr = &alias->d_name; 1376 1377 /* 1378 * Don't need alias->d_lock here, because aliases with 1379 * d_parent == entry->d_parent are not subject to name or 1380 * parent changes, because the parent inode i_mutex is held. 1381 */ 1382 if (qstr->hash != hash) 1383 continue; 1384 if (alias->d_parent != entry->d_parent) 1385 continue; 1386 if (dentry_cmp(qstr->name, qstr->len, name, len)) 1387 continue; 1388 __dget(alias); 1389 return alias; 1390 } 1391 1392 __d_instantiate(entry, inode); 1393 return NULL; 1394 } 1395 1396 struct dentry *d_instantiate_unique(struct dentry *entry, struct inode *inode) 1397 { 1398 struct dentry *result; 1399 1400 BUG_ON(!list_empty(&entry->d_alias)); 1401 1402 if (inode) 1403 spin_lock(&inode->i_lock); 1404 result = __d_instantiate_unique(entry, inode); 1405 if (inode) 1406 spin_unlock(&inode->i_lock); 1407 1408 if (!result) { 1409 security_d_instantiate(entry, inode); 1410 return NULL; 1411 } 1412 1413 BUG_ON(!d_unhashed(result)); 1414 iput(inode); 1415 return result; 1416 } 1417 1418 EXPORT_SYMBOL(d_instantiate_unique); 1419 1420 /** 1421 * d_alloc_root - allocate root dentry 1422 * @root_inode: inode to allocate the root for 1423 * 1424 * Allocate a root ("/") dentry for the inode given. The inode is 1425 * instantiated and returned. %NULL is returned if there is insufficient 1426 * memory or the inode passed is %NULL. 1427 */ 1428 1429 struct dentry * d_alloc_root(struct inode * root_inode) 1430 { 1431 struct dentry *res = NULL; 1432 1433 if (root_inode) { 1434 static const struct qstr name = { .name = "/", .len = 1 }; 1435 1436 res = __d_alloc(root_inode->i_sb, &name); 1437 if (res) 1438 d_instantiate(res, root_inode); 1439 } 1440 return res; 1441 } 1442 EXPORT_SYMBOL(d_alloc_root); 1443 1444 static struct dentry * __d_find_any_alias(struct inode *inode) 1445 { 1446 struct dentry *alias; 1447 1448 if (list_empty(&inode->i_dentry)) 1449 return NULL; 1450 alias = list_first_entry(&inode->i_dentry, struct dentry, d_alias); 1451 __dget(alias); 1452 return alias; 1453 } 1454 1455 static struct dentry * d_find_any_alias(struct inode *inode) 1456 { 1457 struct dentry *de; 1458 1459 spin_lock(&inode->i_lock); 1460 de = __d_find_any_alias(inode); 1461 spin_unlock(&inode->i_lock); 1462 return de; 1463 } 1464 1465 1466 /** 1467 * d_obtain_alias - find or allocate a dentry for a given inode 1468 * @inode: inode to allocate the dentry for 1469 * 1470 * Obtain a dentry for an inode resulting from NFS filehandle conversion or 1471 * similar open by handle operations. The returned dentry may be anonymous, 1472 * or may have a full name (if the inode was already in the cache). 1473 * 1474 * When called on a directory inode, we must ensure that the inode only ever 1475 * has one dentry. If a dentry is found, that is returned instead of 1476 * allocating a new one. 1477 * 1478 * On successful return, the reference to the inode has been transferred 1479 * to the dentry. In case of an error the reference on the inode is released. 1480 * To make it easier to use in export operations a %NULL or IS_ERR inode may 1481 * be passed in and will be the error will be propagate to the return value, 1482 * with a %NULL @inode replaced by ERR_PTR(-ESTALE). 1483 */ 1484 struct dentry *d_obtain_alias(struct inode *inode) 1485 { 1486 static const struct qstr anonstring = { .name = "" }; 1487 struct dentry *tmp; 1488 struct dentry *res; 1489 1490 if (!inode) 1491 return ERR_PTR(-ESTALE); 1492 if (IS_ERR(inode)) 1493 return ERR_CAST(inode); 1494 1495 res = d_find_any_alias(inode); 1496 if (res) 1497 goto out_iput; 1498 1499 tmp = __d_alloc(inode->i_sb, &anonstring); 1500 if (!tmp) { 1501 res = ERR_PTR(-ENOMEM); 1502 goto out_iput; 1503 } 1504 1505 spin_lock(&inode->i_lock); 1506 res = __d_find_any_alias(inode); 1507 if (res) { 1508 spin_unlock(&inode->i_lock); 1509 dput(tmp); 1510 goto out_iput; 1511 } 1512 1513 /* attach a disconnected dentry */ 1514 spin_lock(&tmp->d_lock); 1515 tmp->d_inode = inode; 1516 tmp->d_flags |= DCACHE_DISCONNECTED; 1517 list_add(&tmp->d_alias, &inode->i_dentry); 1518 hlist_bl_lock(&tmp->d_sb->s_anon); 1519 hlist_bl_add_head(&tmp->d_hash, &tmp->d_sb->s_anon); 1520 hlist_bl_unlock(&tmp->d_sb->s_anon); 1521 spin_unlock(&tmp->d_lock); 1522 spin_unlock(&inode->i_lock); 1523 security_d_instantiate(tmp, inode); 1524 1525 return tmp; 1526 1527 out_iput: 1528 if (res && !IS_ERR(res)) 1529 security_d_instantiate(res, inode); 1530 iput(inode); 1531 return res; 1532 } 1533 EXPORT_SYMBOL(d_obtain_alias); 1534 1535 /** 1536 * d_splice_alias - splice a disconnected dentry into the tree if one exists 1537 * @inode: the inode which may have a disconnected dentry 1538 * @dentry: a negative dentry which we want to point to the inode. 1539 * 1540 * If inode is a directory and has a 'disconnected' dentry (i.e. IS_ROOT and 1541 * DCACHE_DISCONNECTED), then d_move that in place of the given dentry 1542 * and return it, else simply d_add the inode to the dentry and return NULL. 1543 * 1544 * This is needed in the lookup routine of any filesystem that is exportable 1545 * (via knfsd) so that we can build dcache paths to directories effectively. 1546 * 1547 * If a dentry was found and moved, then it is returned. Otherwise NULL 1548 * is returned. This matches the expected return value of ->lookup. 1549 * 1550 */ 1551 struct dentry *d_splice_alias(struct inode *inode, struct dentry *dentry) 1552 { 1553 struct dentry *new = NULL; 1554 1555 if (IS_ERR(inode)) 1556 return ERR_CAST(inode); 1557 1558 if (inode && S_ISDIR(inode->i_mode)) { 1559 spin_lock(&inode->i_lock); 1560 new = __d_find_alias(inode, 1); 1561 if (new) { 1562 BUG_ON(!(new->d_flags & DCACHE_DISCONNECTED)); 1563 spin_unlock(&inode->i_lock); 1564 security_d_instantiate(new, inode); 1565 d_move(new, dentry); 1566 iput(inode); 1567 } else { 1568 /* already taking inode->i_lock, so d_add() by hand */ 1569 __d_instantiate(dentry, inode); 1570 spin_unlock(&inode->i_lock); 1571 security_d_instantiate(dentry, inode); 1572 d_rehash(dentry); 1573 } 1574 } else 1575 d_add(dentry, inode); 1576 return new; 1577 } 1578 EXPORT_SYMBOL(d_splice_alias); 1579 1580 /** 1581 * d_add_ci - lookup or allocate new dentry with case-exact name 1582 * @inode: the inode case-insensitive lookup has found 1583 * @dentry: the negative dentry that was passed to the parent's lookup func 1584 * @name: the case-exact name to be associated with the returned dentry 1585 * 1586 * This is to avoid filling the dcache with case-insensitive names to the 1587 * same inode, only the actual correct case is stored in the dcache for 1588 * case-insensitive filesystems. 1589 * 1590 * For a case-insensitive lookup match and if the the case-exact dentry 1591 * already exists in in the dcache, use it and return it. 1592 * 1593 * If no entry exists with the exact case name, allocate new dentry with 1594 * the exact case, and return the spliced entry. 1595 */ 1596 struct dentry *d_add_ci(struct dentry *dentry, struct inode *inode, 1597 struct qstr *name) 1598 { 1599 int error; 1600 struct dentry *found; 1601 struct dentry *new; 1602 1603 /* 1604 * First check if a dentry matching the name already exists, 1605 * if not go ahead and create it now. 1606 */ 1607 found = d_hash_and_lookup(dentry->d_parent, name); 1608 if (!found) { 1609 new = d_alloc(dentry->d_parent, name); 1610 if (!new) { 1611 error = -ENOMEM; 1612 goto err_out; 1613 } 1614 1615 found = d_splice_alias(inode, new); 1616 if (found) { 1617 dput(new); 1618 return found; 1619 } 1620 return new; 1621 } 1622 1623 /* 1624 * If a matching dentry exists, and it's not negative use it. 1625 * 1626 * Decrement the reference count to balance the iget() done 1627 * earlier on. 1628 */ 1629 if (found->d_inode) { 1630 if (unlikely(found->d_inode != inode)) { 1631 /* This can't happen because bad inodes are unhashed. */ 1632 BUG_ON(!is_bad_inode(inode)); 1633 BUG_ON(!is_bad_inode(found->d_inode)); 1634 } 1635 iput(inode); 1636 return found; 1637 } 1638 1639 /* 1640 * We are going to instantiate this dentry, unhash it and clear the 1641 * lookup flag so we can do that. 1642 */ 1643 if (unlikely(d_need_lookup(found))) 1644 d_clear_need_lookup(found); 1645 1646 /* 1647 * Negative dentry: instantiate it unless the inode is a directory and 1648 * already has a dentry. 1649 */ 1650 new = d_splice_alias(inode, found); 1651 if (new) { 1652 dput(found); 1653 found = new; 1654 } 1655 return found; 1656 1657 err_out: 1658 iput(inode); 1659 return ERR_PTR(error); 1660 } 1661 EXPORT_SYMBOL(d_add_ci); 1662 1663 /** 1664 * __d_lookup_rcu - search for a dentry (racy, store-free) 1665 * @parent: parent dentry 1666 * @name: qstr of name we wish to find 1667 * @seq: returns d_seq value at the point where the dentry was found 1668 * @inode: returns dentry->d_inode when the inode was found valid. 1669 * Returns: dentry, or NULL 1670 * 1671 * __d_lookup_rcu is the dcache lookup function for rcu-walk name 1672 * resolution (store-free path walking) design described in 1673 * Documentation/filesystems/path-lookup.txt. 1674 * 1675 * This is not to be used outside core vfs. 1676 * 1677 * __d_lookup_rcu must only be used in rcu-walk mode, ie. with vfsmount lock 1678 * held, and rcu_read_lock held. The returned dentry must not be stored into 1679 * without taking d_lock and checking d_seq sequence count against @seq 1680 * returned here. 1681 * 1682 * A refcount may be taken on the found dentry with the __d_rcu_to_refcount 1683 * function. 1684 * 1685 * Alternatively, __d_lookup_rcu may be called again to look up the child of 1686 * the returned dentry, so long as its parent's seqlock is checked after the 1687 * child is looked up. Thus, an interlocking stepping of sequence lock checks 1688 * is formed, giving integrity down the path walk. 1689 */ 1690 struct dentry *__d_lookup_rcu(struct dentry *parent, struct qstr *name, 1691 unsigned *seq, struct inode **inode) 1692 { 1693 unsigned int len = name->len; 1694 unsigned int hash = name->hash; 1695 const unsigned char *str = name->name; 1696 struct hlist_bl_head *b = d_hash(parent, hash); 1697 struct hlist_bl_node *node; 1698 struct dentry *dentry; 1699 1700 /* 1701 * Note: There is significant duplication with __d_lookup_rcu which is 1702 * required to prevent single threaded performance regressions 1703 * especially on architectures where smp_rmb (in seqcounts) are costly. 1704 * Keep the two functions in sync. 1705 */ 1706 1707 /* 1708 * The hash list is protected using RCU. 1709 * 1710 * Carefully use d_seq when comparing a candidate dentry, to avoid 1711 * races with d_move(). 1712 * 1713 * It is possible that concurrent renames can mess up our list 1714 * walk here and result in missing our dentry, resulting in the 1715 * false-negative result. d_lookup() protects against concurrent 1716 * renames using rename_lock seqlock. 1717 * 1718 * See Documentation/filesystems/path-lookup.txt for more details. 1719 */ 1720 hlist_bl_for_each_entry_rcu(dentry, node, b, d_hash) { 1721 struct inode *i; 1722 const char *tname; 1723 int tlen; 1724 1725 if (dentry->d_name.hash != hash) 1726 continue; 1727 1728 seqretry: 1729 *seq = read_seqcount_begin(&dentry->d_seq); 1730 if (dentry->d_parent != parent) 1731 continue; 1732 if (d_unhashed(dentry)) 1733 continue; 1734 tlen = dentry->d_name.len; 1735 tname = dentry->d_name.name; 1736 i = dentry->d_inode; 1737 prefetch(tname); 1738 /* 1739 * This seqcount check is required to ensure name and 1740 * len are loaded atomically, so as not to walk off the 1741 * edge of memory when walking. If we could load this 1742 * atomically some other way, we could drop this check. 1743 */ 1744 if (read_seqcount_retry(&dentry->d_seq, *seq)) 1745 goto seqretry; 1746 if (parent->d_flags & DCACHE_OP_COMPARE) { 1747 if (parent->d_op->d_compare(parent, *inode, 1748 dentry, i, 1749 tlen, tname, name)) 1750 continue; 1751 } else { 1752 if (dentry_cmp(tname, tlen, str, len)) 1753 continue; 1754 } 1755 /* 1756 * No extra seqcount check is required after the name 1757 * compare. The caller must perform a seqcount check in 1758 * order to do anything useful with the returned dentry 1759 * anyway. 1760 */ 1761 *inode = i; 1762 return dentry; 1763 } 1764 return NULL; 1765 } 1766 1767 /** 1768 * d_lookup - search for a dentry 1769 * @parent: parent dentry 1770 * @name: qstr of name we wish to find 1771 * Returns: dentry, or NULL 1772 * 1773 * d_lookup searches the children of the parent dentry for the name in 1774 * question. If the dentry is found its reference count is incremented and the 1775 * dentry is returned. The caller must use dput to free the entry when it has 1776 * finished using it. %NULL is returned if the dentry does not exist. 1777 */ 1778 struct dentry *d_lookup(struct dentry *parent, struct qstr *name) 1779 { 1780 struct dentry *dentry; 1781 unsigned seq; 1782 1783 do { 1784 seq = read_seqbegin(&rename_lock); 1785 dentry = __d_lookup(parent, name); 1786 if (dentry) 1787 break; 1788 } while (read_seqretry(&rename_lock, seq)); 1789 return dentry; 1790 } 1791 EXPORT_SYMBOL(d_lookup); 1792 1793 /** 1794 * __d_lookup - search for a dentry (racy) 1795 * @parent: parent dentry 1796 * @name: qstr of name we wish to find 1797 * Returns: dentry, or NULL 1798 * 1799 * __d_lookup is like d_lookup, however it may (rarely) return a 1800 * false-negative result due to unrelated rename activity. 1801 * 1802 * __d_lookup is slightly faster by avoiding rename_lock read seqlock, 1803 * however it must be used carefully, eg. with a following d_lookup in 1804 * the case of failure. 1805 * 1806 * __d_lookup callers must be commented. 1807 */ 1808 struct dentry *__d_lookup(struct dentry *parent, struct qstr *name) 1809 { 1810 unsigned int len = name->len; 1811 unsigned int hash = name->hash; 1812 const unsigned char *str = name->name; 1813 struct hlist_bl_head *b = d_hash(parent, hash); 1814 struct hlist_bl_node *node; 1815 struct dentry *found = NULL; 1816 struct dentry *dentry; 1817 1818 /* 1819 * Note: There is significant duplication with __d_lookup_rcu which is 1820 * required to prevent single threaded performance regressions 1821 * especially on architectures where smp_rmb (in seqcounts) are costly. 1822 * Keep the two functions in sync. 1823 */ 1824 1825 /* 1826 * The hash list is protected using RCU. 1827 * 1828 * Take d_lock when comparing a candidate dentry, to avoid races 1829 * with d_move(). 1830 * 1831 * It is possible that concurrent renames can mess up our list 1832 * walk here and result in missing our dentry, resulting in the 1833 * false-negative result. d_lookup() protects against concurrent 1834 * renames using rename_lock seqlock. 1835 * 1836 * See Documentation/filesystems/path-lookup.txt for more details. 1837 */ 1838 rcu_read_lock(); 1839 1840 hlist_bl_for_each_entry_rcu(dentry, node, b, d_hash) { 1841 const char *tname; 1842 int tlen; 1843 1844 if (dentry->d_name.hash != hash) 1845 continue; 1846 1847 spin_lock(&dentry->d_lock); 1848 if (dentry->d_parent != parent) 1849 goto next; 1850 if (d_unhashed(dentry)) 1851 goto next; 1852 1853 /* 1854 * It is safe to compare names since d_move() cannot 1855 * change the qstr (protected by d_lock). 1856 */ 1857 tlen = dentry->d_name.len; 1858 tname = dentry->d_name.name; 1859 if (parent->d_flags & DCACHE_OP_COMPARE) { 1860 if (parent->d_op->d_compare(parent, parent->d_inode, 1861 dentry, dentry->d_inode, 1862 tlen, tname, name)) 1863 goto next; 1864 } else { 1865 if (dentry_cmp(tname, tlen, str, len)) 1866 goto next; 1867 } 1868 1869 dentry->d_count++; 1870 found = dentry; 1871 spin_unlock(&dentry->d_lock); 1872 break; 1873 next: 1874 spin_unlock(&dentry->d_lock); 1875 } 1876 rcu_read_unlock(); 1877 1878 return found; 1879 } 1880 1881 /** 1882 * d_hash_and_lookup - hash the qstr then search for a dentry 1883 * @dir: Directory to search in 1884 * @name: qstr of name we wish to find 1885 * 1886 * On hash failure or on lookup failure NULL is returned. 1887 */ 1888 struct dentry *d_hash_and_lookup(struct dentry *dir, struct qstr *name) 1889 { 1890 struct dentry *dentry = NULL; 1891 1892 /* 1893 * Check for a fs-specific hash function. Note that we must 1894 * calculate the standard hash first, as the d_op->d_hash() 1895 * routine may choose to leave the hash value unchanged. 1896 */ 1897 name->hash = full_name_hash(name->name, name->len); 1898 if (dir->d_flags & DCACHE_OP_HASH) { 1899 if (dir->d_op->d_hash(dir, dir->d_inode, name) < 0) 1900 goto out; 1901 } 1902 dentry = d_lookup(dir, name); 1903 out: 1904 return dentry; 1905 } 1906 1907 /** 1908 * d_validate - verify dentry provided from insecure source (deprecated) 1909 * @dentry: The dentry alleged to be valid child of @dparent 1910 * @dparent: The parent dentry (known to be valid) 1911 * 1912 * An insecure source has sent us a dentry, here we verify it and dget() it. 1913 * This is used by ncpfs in its readdir implementation. 1914 * Zero is returned in the dentry is invalid. 1915 * 1916 * This function is slow for big directories, and deprecated, do not use it. 1917 */ 1918 int d_validate(struct dentry *dentry, struct dentry *dparent) 1919 { 1920 struct dentry *child; 1921 1922 spin_lock(&dparent->d_lock); 1923 list_for_each_entry(child, &dparent->d_subdirs, d_u.d_child) { 1924 if (dentry == child) { 1925 spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED); 1926 __dget_dlock(dentry); 1927 spin_unlock(&dentry->d_lock); 1928 spin_unlock(&dparent->d_lock); 1929 return 1; 1930 } 1931 } 1932 spin_unlock(&dparent->d_lock); 1933 1934 return 0; 1935 } 1936 EXPORT_SYMBOL(d_validate); 1937 1938 /* 1939 * When a file is deleted, we have two options: 1940 * - turn this dentry into a negative dentry 1941 * - unhash this dentry and free it. 1942 * 1943 * Usually, we want to just turn this into 1944 * a negative dentry, but if anybody else is 1945 * currently using the dentry or the inode 1946 * we can't do that and we fall back on removing 1947 * it from the hash queues and waiting for 1948 * it to be deleted later when it has no users 1949 */ 1950 1951 /** 1952 * d_delete - delete a dentry 1953 * @dentry: The dentry to delete 1954 * 1955 * Turn the dentry into a negative dentry if possible, otherwise 1956 * remove it from the hash queues so it can be deleted later 1957 */ 1958 1959 void d_delete(struct dentry * dentry) 1960 { 1961 struct inode *inode; 1962 int isdir = 0; 1963 /* 1964 * Are we the only user? 1965 */ 1966 again: 1967 spin_lock(&dentry->d_lock); 1968 inode = dentry->d_inode; 1969 isdir = S_ISDIR(inode->i_mode); 1970 if (dentry->d_count == 1) { 1971 if (inode && !spin_trylock(&inode->i_lock)) { 1972 spin_unlock(&dentry->d_lock); 1973 cpu_relax(); 1974 goto again; 1975 } 1976 dentry->d_flags &= ~DCACHE_CANT_MOUNT; 1977 dentry_unlink_inode(dentry); 1978 fsnotify_nameremove(dentry, isdir); 1979 return; 1980 } 1981 1982 if (!d_unhashed(dentry)) 1983 __d_drop(dentry); 1984 1985 spin_unlock(&dentry->d_lock); 1986 1987 fsnotify_nameremove(dentry, isdir); 1988 } 1989 EXPORT_SYMBOL(d_delete); 1990 1991 static void __d_rehash(struct dentry * entry, struct hlist_bl_head *b) 1992 { 1993 BUG_ON(!d_unhashed(entry)); 1994 hlist_bl_lock(b); 1995 entry->d_flags |= DCACHE_RCUACCESS; 1996 hlist_bl_add_head_rcu(&entry->d_hash, b); 1997 hlist_bl_unlock(b); 1998 } 1999 2000 static void _d_rehash(struct dentry * entry) 2001 { 2002 __d_rehash(entry, d_hash(entry->d_parent, entry->d_name.hash)); 2003 } 2004 2005 /** 2006 * d_rehash - add an entry back to the hash 2007 * @entry: dentry to add to the hash 2008 * 2009 * Adds a dentry to the hash according to its name. 2010 */ 2011 2012 void d_rehash(struct dentry * entry) 2013 { 2014 spin_lock(&entry->d_lock); 2015 _d_rehash(entry); 2016 spin_unlock(&entry->d_lock); 2017 } 2018 EXPORT_SYMBOL(d_rehash); 2019 2020 /** 2021 * dentry_update_name_case - update case insensitive dentry with a new name 2022 * @dentry: dentry to be updated 2023 * @name: new name 2024 * 2025 * Update a case insensitive dentry with new case of name. 2026 * 2027 * dentry must have been returned by d_lookup with name @name. Old and new 2028 * name lengths must match (ie. no d_compare which allows mismatched name 2029 * lengths). 2030 * 2031 * Parent inode i_mutex must be held over d_lookup and into this call (to 2032 * keep renames and concurrent inserts, and readdir(2) away). 2033 */ 2034 void dentry_update_name_case(struct dentry *dentry, struct qstr *name) 2035 { 2036 BUG_ON(!mutex_is_locked(&dentry->d_parent->d_inode->i_mutex)); 2037 BUG_ON(dentry->d_name.len != name->len); /* d_lookup gives this */ 2038 2039 spin_lock(&dentry->d_lock); 2040 write_seqcount_begin(&dentry->d_seq); 2041 memcpy((unsigned char *)dentry->d_name.name, name->name, name->len); 2042 write_seqcount_end(&dentry->d_seq); 2043 spin_unlock(&dentry->d_lock); 2044 } 2045 EXPORT_SYMBOL(dentry_update_name_case); 2046 2047 static void switch_names(struct dentry *dentry, struct dentry *target) 2048 { 2049 if (dname_external(target)) { 2050 if (dname_external(dentry)) { 2051 /* 2052 * Both external: swap the pointers 2053 */ 2054 swap(target->d_name.name, dentry->d_name.name); 2055 } else { 2056 /* 2057 * dentry:internal, target:external. Steal target's 2058 * storage and make target internal. 2059 */ 2060 memcpy(target->d_iname, dentry->d_name.name, 2061 dentry->d_name.len + 1); 2062 dentry->d_name.name = target->d_name.name; 2063 target->d_name.name = target->d_iname; 2064 } 2065 } else { 2066 if (dname_external(dentry)) { 2067 /* 2068 * dentry:external, target:internal. Give dentry's 2069 * storage to target and make dentry internal 2070 */ 2071 memcpy(dentry->d_iname, target->d_name.name, 2072 target->d_name.len + 1); 2073 target->d_name.name = dentry->d_name.name; 2074 dentry->d_name.name = dentry->d_iname; 2075 } else { 2076 /* 2077 * Both are internal. Just copy target to dentry 2078 */ 2079 memcpy(dentry->d_iname, target->d_name.name, 2080 target->d_name.len + 1); 2081 dentry->d_name.len = target->d_name.len; 2082 return; 2083 } 2084 } 2085 swap(dentry->d_name.len, target->d_name.len); 2086 } 2087 2088 static void dentry_lock_for_move(struct dentry *dentry, struct dentry *target) 2089 { 2090 /* 2091 * XXXX: do we really need to take target->d_lock? 2092 */ 2093 if (IS_ROOT(dentry) || dentry->d_parent == target->d_parent) 2094 spin_lock(&target->d_parent->d_lock); 2095 else { 2096 if (d_ancestor(dentry->d_parent, target->d_parent)) { 2097 spin_lock(&dentry->d_parent->d_lock); 2098 spin_lock_nested(&target->d_parent->d_lock, 2099 DENTRY_D_LOCK_NESTED); 2100 } else { 2101 spin_lock(&target->d_parent->d_lock); 2102 spin_lock_nested(&dentry->d_parent->d_lock, 2103 DENTRY_D_LOCK_NESTED); 2104 } 2105 } 2106 if (target < dentry) { 2107 spin_lock_nested(&target->d_lock, 2); 2108 spin_lock_nested(&dentry->d_lock, 3); 2109 } else { 2110 spin_lock_nested(&dentry->d_lock, 2); 2111 spin_lock_nested(&target->d_lock, 3); 2112 } 2113 } 2114 2115 static void dentry_unlock_parents_for_move(struct dentry *dentry, 2116 struct dentry *target) 2117 { 2118 if (target->d_parent != dentry->d_parent) 2119 spin_unlock(&dentry->d_parent->d_lock); 2120 if (target->d_parent != target) 2121 spin_unlock(&target->d_parent->d_lock); 2122 } 2123 2124 /* 2125 * When switching names, the actual string doesn't strictly have to 2126 * be preserved in the target - because we're dropping the target 2127 * anyway. As such, we can just do a simple memcpy() to copy over 2128 * the new name before we switch. 2129 * 2130 * Note that we have to be a lot more careful about getting the hash 2131 * switched - we have to switch the hash value properly even if it 2132 * then no longer matches the actual (corrupted) string of the target. 2133 * The hash value has to match the hash queue that the dentry is on.. 2134 */ 2135 /* 2136 * __d_move - move a dentry 2137 * @dentry: entry to move 2138 * @target: new dentry 2139 * 2140 * Update the dcache to reflect the move of a file name. Negative 2141 * dcache entries should not be moved in this way. Caller hold 2142 * rename_lock. 2143 */ 2144 static void __d_move(struct dentry * dentry, struct dentry * target) 2145 { 2146 if (!dentry->d_inode) 2147 printk(KERN_WARNING "VFS: moving negative dcache entry\n"); 2148 2149 BUG_ON(d_ancestor(dentry, target)); 2150 BUG_ON(d_ancestor(target, dentry)); 2151 2152 dentry_lock_for_move(dentry, target); 2153 2154 write_seqcount_begin(&dentry->d_seq); 2155 write_seqcount_begin(&target->d_seq); 2156 2157 /* __d_drop does write_seqcount_barrier, but they're OK to nest. */ 2158 2159 /* 2160 * Move the dentry to the target hash queue. Don't bother checking 2161 * for the same hash queue because of how unlikely it is. 2162 */ 2163 __d_drop(dentry); 2164 __d_rehash(dentry, d_hash(target->d_parent, target->d_name.hash)); 2165 2166 /* Unhash the target: dput() will then get rid of it */ 2167 __d_drop(target); 2168 2169 list_del(&dentry->d_u.d_child); 2170 list_del(&target->d_u.d_child); 2171 2172 /* Switch the names.. */ 2173 switch_names(dentry, target); 2174 swap(dentry->d_name.hash, target->d_name.hash); 2175 2176 /* ... and switch the parents */ 2177 if (IS_ROOT(dentry)) { 2178 dentry->d_parent = target->d_parent; 2179 target->d_parent = target; 2180 INIT_LIST_HEAD(&target->d_u.d_child); 2181 } else { 2182 swap(dentry->d_parent, target->d_parent); 2183 2184 /* And add them back to the (new) parent lists */ 2185 list_add(&target->d_u.d_child, &target->d_parent->d_subdirs); 2186 } 2187 2188 list_add(&dentry->d_u.d_child, &dentry->d_parent->d_subdirs); 2189 2190 write_seqcount_end(&target->d_seq); 2191 write_seqcount_end(&dentry->d_seq); 2192 2193 dentry_unlock_parents_for_move(dentry, target); 2194 spin_unlock(&target->d_lock); 2195 fsnotify_d_move(dentry); 2196 spin_unlock(&dentry->d_lock); 2197 } 2198 2199 /* 2200 * d_move - move a dentry 2201 * @dentry: entry to move 2202 * @target: new dentry 2203 * 2204 * Update the dcache to reflect the move of a file name. Negative 2205 * dcache entries should not be moved in this way. 2206 */ 2207 void d_move(struct dentry *dentry, struct dentry *target) 2208 { 2209 write_seqlock(&rename_lock); 2210 __d_move(dentry, target); 2211 write_sequnlock(&rename_lock); 2212 } 2213 EXPORT_SYMBOL(d_move); 2214 2215 /** 2216 * d_ancestor - search for an ancestor 2217 * @p1: ancestor dentry 2218 * @p2: child dentry 2219 * 2220 * Returns the ancestor dentry of p2 which is a child of p1, if p1 is 2221 * an ancestor of p2, else NULL. 2222 */ 2223 struct dentry *d_ancestor(struct dentry *p1, struct dentry *p2) 2224 { 2225 struct dentry *p; 2226 2227 for (p = p2; !IS_ROOT(p); p = p->d_parent) { 2228 if (p->d_parent == p1) 2229 return p; 2230 } 2231 return NULL; 2232 } 2233 2234 /* 2235 * This helper attempts to cope with remotely renamed directories 2236 * 2237 * It assumes that the caller is already holding 2238 * dentry->d_parent->d_inode->i_mutex, inode->i_lock and rename_lock 2239 * 2240 * Note: If ever the locking in lock_rename() changes, then please 2241 * remember to update this too... 2242 */ 2243 static struct dentry *__d_unalias(struct inode *inode, 2244 struct dentry *dentry, struct dentry *alias) 2245 { 2246 struct mutex *m1 = NULL, *m2 = NULL; 2247 struct dentry *ret; 2248 2249 /* If alias and dentry share a parent, then no extra locks required */ 2250 if (alias->d_parent == dentry->d_parent) 2251 goto out_unalias; 2252 2253 /* See lock_rename() */ 2254 ret = ERR_PTR(-EBUSY); 2255 if (!mutex_trylock(&dentry->d_sb->s_vfs_rename_mutex)) 2256 goto out_err; 2257 m1 = &dentry->d_sb->s_vfs_rename_mutex; 2258 if (!mutex_trylock(&alias->d_parent->d_inode->i_mutex)) 2259 goto out_err; 2260 m2 = &alias->d_parent->d_inode->i_mutex; 2261 out_unalias: 2262 __d_move(alias, dentry); 2263 ret = alias; 2264 out_err: 2265 spin_unlock(&inode->i_lock); 2266 if (m2) 2267 mutex_unlock(m2); 2268 if (m1) 2269 mutex_unlock(m1); 2270 return ret; 2271 } 2272 2273 /* 2274 * Prepare an anonymous dentry for life in the superblock's dentry tree as a 2275 * named dentry in place of the dentry to be replaced. 2276 * returns with anon->d_lock held! 2277 */ 2278 static void __d_materialise_dentry(struct dentry *dentry, struct dentry *anon) 2279 { 2280 struct dentry *dparent, *aparent; 2281 2282 dentry_lock_for_move(anon, dentry); 2283 2284 write_seqcount_begin(&dentry->d_seq); 2285 write_seqcount_begin(&anon->d_seq); 2286 2287 dparent = dentry->d_parent; 2288 aparent = anon->d_parent; 2289 2290 switch_names(dentry, anon); 2291 swap(dentry->d_name.hash, anon->d_name.hash); 2292 2293 dentry->d_parent = (aparent == anon) ? dentry : aparent; 2294 list_del(&dentry->d_u.d_child); 2295 if (!IS_ROOT(dentry)) 2296 list_add(&dentry->d_u.d_child, &dentry->d_parent->d_subdirs); 2297 else 2298 INIT_LIST_HEAD(&dentry->d_u.d_child); 2299 2300 anon->d_parent = (dparent == dentry) ? anon : dparent; 2301 list_del(&anon->d_u.d_child); 2302 if (!IS_ROOT(anon)) 2303 list_add(&anon->d_u.d_child, &anon->d_parent->d_subdirs); 2304 else 2305 INIT_LIST_HEAD(&anon->d_u.d_child); 2306 2307 write_seqcount_end(&dentry->d_seq); 2308 write_seqcount_end(&anon->d_seq); 2309 2310 dentry_unlock_parents_for_move(anon, dentry); 2311 spin_unlock(&dentry->d_lock); 2312 2313 /* anon->d_lock still locked, returns locked */ 2314 anon->d_flags &= ~DCACHE_DISCONNECTED; 2315 } 2316 2317 /** 2318 * d_materialise_unique - introduce an inode into the tree 2319 * @dentry: candidate dentry 2320 * @inode: inode to bind to the dentry, to which aliases may be attached 2321 * 2322 * Introduces an dentry into the tree, substituting an extant disconnected 2323 * root directory alias in its place if there is one 2324 */ 2325 struct dentry *d_materialise_unique(struct dentry *dentry, struct inode *inode) 2326 { 2327 struct dentry *actual; 2328 2329 BUG_ON(!d_unhashed(dentry)); 2330 2331 if (!inode) { 2332 actual = dentry; 2333 __d_instantiate(dentry, NULL); 2334 d_rehash(actual); 2335 goto out_nolock; 2336 } 2337 2338 spin_lock(&inode->i_lock); 2339 2340 if (S_ISDIR(inode->i_mode)) { 2341 struct dentry *alias; 2342 2343 /* Does an aliased dentry already exist? */ 2344 alias = __d_find_alias(inode, 0); 2345 if (alias) { 2346 actual = alias; 2347 write_seqlock(&rename_lock); 2348 2349 if (d_ancestor(alias, dentry)) { 2350 /* Check for loops */ 2351 actual = ERR_PTR(-ELOOP); 2352 } else if (IS_ROOT(alias)) { 2353 /* Is this an anonymous mountpoint that we 2354 * could splice into our tree? */ 2355 __d_materialise_dentry(dentry, alias); 2356 write_sequnlock(&rename_lock); 2357 __d_drop(alias); 2358 goto found; 2359 } else { 2360 /* Nope, but we must(!) avoid directory 2361 * aliasing */ 2362 actual = __d_unalias(inode, dentry, alias); 2363 } 2364 write_sequnlock(&rename_lock); 2365 if (IS_ERR(actual)) 2366 dput(alias); 2367 goto out_nolock; 2368 } 2369 } 2370 2371 /* Add a unique reference */ 2372 actual = __d_instantiate_unique(dentry, inode); 2373 if (!actual) 2374 actual = dentry; 2375 else 2376 BUG_ON(!d_unhashed(actual)); 2377 2378 spin_lock(&actual->d_lock); 2379 found: 2380 _d_rehash(actual); 2381 spin_unlock(&actual->d_lock); 2382 spin_unlock(&inode->i_lock); 2383 out_nolock: 2384 if (actual == dentry) { 2385 security_d_instantiate(dentry, inode); 2386 return NULL; 2387 } 2388 2389 iput(inode); 2390 return actual; 2391 } 2392 EXPORT_SYMBOL_GPL(d_materialise_unique); 2393 2394 static int prepend(char **buffer, int *buflen, const char *str, int namelen) 2395 { 2396 *buflen -= namelen; 2397 if (*buflen < 0) 2398 return -ENAMETOOLONG; 2399 *buffer -= namelen; 2400 memcpy(*buffer, str, namelen); 2401 return 0; 2402 } 2403 2404 static int prepend_name(char **buffer, int *buflen, struct qstr *name) 2405 { 2406 return prepend(buffer, buflen, name->name, name->len); 2407 } 2408 2409 /** 2410 * prepend_path - Prepend path string to a buffer 2411 * @path: the dentry/vfsmount to report 2412 * @root: root vfsmnt/dentry (may be modified by this function) 2413 * @buffer: pointer to the end of the buffer 2414 * @buflen: pointer to buffer length 2415 * 2416 * Caller holds the rename_lock. 2417 * 2418 * If path is not reachable from the supplied root, then the value of 2419 * root is changed (without modifying refcounts). 2420 */ 2421 static int prepend_path(const struct path *path, struct path *root, 2422 char **buffer, int *buflen) 2423 { 2424 struct dentry *dentry = path->dentry; 2425 struct vfsmount *vfsmnt = path->mnt; 2426 bool slash = false; 2427 int error = 0; 2428 2429 br_read_lock(vfsmount_lock); 2430 while (dentry != root->dentry || vfsmnt != root->mnt) { 2431 struct dentry * parent; 2432 2433 if (dentry == vfsmnt->mnt_root || IS_ROOT(dentry)) { 2434 /* Global root? */ 2435 if (vfsmnt->mnt_parent == vfsmnt) { 2436 goto global_root; 2437 } 2438 dentry = vfsmnt->mnt_mountpoint; 2439 vfsmnt = vfsmnt->mnt_parent; 2440 continue; 2441 } 2442 parent = dentry->d_parent; 2443 prefetch(parent); 2444 spin_lock(&dentry->d_lock); 2445 error = prepend_name(buffer, buflen, &dentry->d_name); 2446 spin_unlock(&dentry->d_lock); 2447 if (!error) 2448 error = prepend(buffer, buflen, "/", 1); 2449 if (error) 2450 break; 2451 2452 slash = true; 2453 dentry = parent; 2454 } 2455 2456 out: 2457 if (!error && !slash) 2458 error = prepend(buffer, buflen, "/", 1); 2459 2460 br_read_unlock(vfsmount_lock); 2461 return error; 2462 2463 global_root: 2464 /* 2465 * Filesystems needing to implement special "root names" 2466 * should do so with ->d_dname() 2467 */ 2468 if (IS_ROOT(dentry) && 2469 (dentry->d_name.len != 1 || dentry->d_name.name[0] != '/')) { 2470 WARN(1, "Root dentry has weird name <%.*s>\n", 2471 (int) dentry->d_name.len, dentry->d_name.name); 2472 } 2473 root->mnt = vfsmnt; 2474 root->dentry = dentry; 2475 goto out; 2476 } 2477 2478 /** 2479 * __d_path - return the path of a dentry 2480 * @path: the dentry/vfsmount to report 2481 * @root: root vfsmnt/dentry (may be modified by this function) 2482 * @buf: buffer to return value in 2483 * @buflen: buffer length 2484 * 2485 * Convert a dentry into an ASCII path name. 2486 * 2487 * Returns a pointer into the buffer or an error code if the 2488 * path was too long. 2489 * 2490 * "buflen" should be positive. 2491 * 2492 * If path is not reachable from the supplied root, then the value of 2493 * root is changed (without modifying refcounts). 2494 */ 2495 char *__d_path(const struct path *path, struct path *root, 2496 char *buf, int buflen) 2497 { 2498 char *res = buf + buflen; 2499 int error; 2500 2501 prepend(&res, &buflen, "\0", 1); 2502 write_seqlock(&rename_lock); 2503 error = prepend_path(path, root, &res, &buflen); 2504 write_sequnlock(&rename_lock); 2505 2506 if (error) 2507 return ERR_PTR(error); 2508 return res; 2509 } 2510 2511 /* 2512 * same as __d_path but appends "(deleted)" for unlinked files. 2513 */ 2514 static int path_with_deleted(const struct path *path, struct path *root, 2515 char **buf, int *buflen) 2516 { 2517 prepend(buf, buflen, "\0", 1); 2518 if (d_unlinked(path->dentry)) { 2519 int error = prepend(buf, buflen, " (deleted)", 10); 2520 if (error) 2521 return error; 2522 } 2523 2524 return prepend_path(path, root, buf, buflen); 2525 } 2526 2527 static int prepend_unreachable(char **buffer, int *buflen) 2528 { 2529 return prepend(buffer, buflen, "(unreachable)", 13); 2530 } 2531 2532 /** 2533 * d_path - return the path of a dentry 2534 * @path: path to report 2535 * @buf: buffer to return value in 2536 * @buflen: buffer length 2537 * 2538 * Convert a dentry into an ASCII path name. If the entry has been deleted 2539 * the string " (deleted)" is appended. Note that this is ambiguous. 2540 * 2541 * Returns a pointer into the buffer or an error code if the path was 2542 * too long. Note: Callers should use the returned pointer, not the passed 2543 * in buffer, to use the name! The implementation often starts at an offset 2544 * into the buffer, and may leave 0 bytes at the start. 2545 * 2546 * "buflen" should be positive. 2547 */ 2548 char *d_path(const struct path *path, char *buf, int buflen) 2549 { 2550 char *res = buf + buflen; 2551 struct path root; 2552 struct path tmp; 2553 int error; 2554 2555 /* 2556 * We have various synthetic filesystems that never get mounted. On 2557 * these filesystems dentries are never used for lookup purposes, and 2558 * thus don't need to be hashed. They also don't need a name until a 2559 * user wants to identify the object in /proc/pid/fd/. The little hack 2560 * below allows us to generate a name for these objects on demand: 2561 */ 2562 if (path->dentry->d_op && path->dentry->d_op->d_dname) 2563 return path->dentry->d_op->d_dname(path->dentry, buf, buflen); 2564 2565 get_fs_root(current->fs, &root); 2566 write_seqlock(&rename_lock); 2567 tmp = root; 2568 error = path_with_deleted(path, &tmp, &res, &buflen); 2569 if (error) 2570 res = ERR_PTR(error); 2571 write_sequnlock(&rename_lock); 2572 path_put(&root); 2573 return res; 2574 } 2575 EXPORT_SYMBOL(d_path); 2576 2577 /** 2578 * d_path_with_unreachable - return the path of a dentry 2579 * @path: path to report 2580 * @buf: buffer to return value in 2581 * @buflen: buffer length 2582 * 2583 * The difference from d_path() is that this prepends "(unreachable)" 2584 * to paths which are unreachable from the current process' root. 2585 */ 2586 char *d_path_with_unreachable(const struct path *path, char *buf, int buflen) 2587 { 2588 char *res = buf + buflen; 2589 struct path root; 2590 struct path tmp; 2591 int error; 2592 2593 if (path->dentry->d_op && path->dentry->d_op->d_dname) 2594 return path->dentry->d_op->d_dname(path->dentry, buf, buflen); 2595 2596 get_fs_root(current->fs, &root); 2597 write_seqlock(&rename_lock); 2598 tmp = root; 2599 error = path_with_deleted(path, &tmp, &res, &buflen); 2600 if (!error && !path_equal(&tmp, &root)) 2601 error = prepend_unreachable(&res, &buflen); 2602 write_sequnlock(&rename_lock); 2603 path_put(&root); 2604 if (error) 2605 res = ERR_PTR(error); 2606 2607 return res; 2608 } 2609 2610 /* 2611 * Helper function for dentry_operations.d_dname() members 2612 */ 2613 char *dynamic_dname(struct dentry *dentry, char *buffer, int buflen, 2614 const char *fmt, ...) 2615 { 2616 va_list args; 2617 char temp[64]; 2618 int sz; 2619 2620 va_start(args, fmt); 2621 sz = vsnprintf(temp, sizeof(temp), fmt, args) + 1; 2622 va_end(args); 2623 2624 if (sz > sizeof(temp) || sz > buflen) 2625 return ERR_PTR(-ENAMETOOLONG); 2626 2627 buffer += buflen - sz; 2628 return memcpy(buffer, temp, sz); 2629 } 2630 2631 /* 2632 * Write full pathname from the root of the filesystem into the buffer. 2633 */ 2634 static char *__dentry_path(struct dentry *dentry, char *buf, int buflen) 2635 { 2636 char *end = buf + buflen; 2637 char *retval; 2638 2639 prepend(&end, &buflen, "\0", 1); 2640 if (buflen < 1) 2641 goto Elong; 2642 /* Get '/' right */ 2643 retval = end-1; 2644 *retval = '/'; 2645 2646 while (!IS_ROOT(dentry)) { 2647 struct dentry *parent = dentry->d_parent; 2648 int error; 2649 2650 prefetch(parent); 2651 spin_lock(&dentry->d_lock); 2652 error = prepend_name(&end, &buflen, &dentry->d_name); 2653 spin_unlock(&dentry->d_lock); 2654 if (error != 0 || prepend(&end, &buflen, "/", 1) != 0) 2655 goto Elong; 2656 2657 retval = end; 2658 dentry = parent; 2659 } 2660 return retval; 2661 Elong: 2662 return ERR_PTR(-ENAMETOOLONG); 2663 } 2664 2665 char *dentry_path_raw(struct dentry *dentry, char *buf, int buflen) 2666 { 2667 char *retval; 2668 2669 write_seqlock(&rename_lock); 2670 retval = __dentry_path(dentry, buf, buflen); 2671 write_sequnlock(&rename_lock); 2672 2673 return retval; 2674 } 2675 EXPORT_SYMBOL(dentry_path_raw); 2676 2677 char *dentry_path(struct dentry *dentry, char *buf, int buflen) 2678 { 2679 char *p = NULL; 2680 char *retval; 2681 2682 write_seqlock(&rename_lock); 2683 if (d_unlinked(dentry)) { 2684 p = buf + buflen; 2685 if (prepend(&p, &buflen, "//deleted", 10) != 0) 2686 goto Elong; 2687 buflen++; 2688 } 2689 retval = __dentry_path(dentry, buf, buflen); 2690 write_sequnlock(&rename_lock); 2691 if (!IS_ERR(retval) && p) 2692 *p = '/'; /* restore '/' overriden with '\0' */ 2693 return retval; 2694 Elong: 2695 return ERR_PTR(-ENAMETOOLONG); 2696 } 2697 2698 /* 2699 * NOTE! The user-level library version returns a 2700 * character pointer. The kernel system call just 2701 * returns the length of the buffer filled (which 2702 * includes the ending '\0' character), or a negative 2703 * error value. So libc would do something like 2704 * 2705 * char *getcwd(char * buf, size_t size) 2706 * { 2707 * int retval; 2708 * 2709 * retval = sys_getcwd(buf, size); 2710 * if (retval >= 0) 2711 * return buf; 2712 * errno = -retval; 2713 * return NULL; 2714 * } 2715 */ 2716 SYSCALL_DEFINE2(getcwd, char __user *, buf, unsigned long, size) 2717 { 2718 int error; 2719 struct path pwd, root; 2720 char *page = (char *) __get_free_page(GFP_USER); 2721 2722 if (!page) 2723 return -ENOMEM; 2724 2725 get_fs_root_and_pwd(current->fs, &root, &pwd); 2726 2727 error = -ENOENT; 2728 write_seqlock(&rename_lock); 2729 if (!d_unlinked(pwd.dentry)) { 2730 unsigned long len; 2731 struct path tmp = root; 2732 char *cwd = page + PAGE_SIZE; 2733 int buflen = PAGE_SIZE; 2734 2735 prepend(&cwd, &buflen, "\0", 1); 2736 error = prepend_path(&pwd, &tmp, &cwd, &buflen); 2737 write_sequnlock(&rename_lock); 2738 2739 if (error) 2740 goto out; 2741 2742 /* Unreachable from current root */ 2743 if (!path_equal(&tmp, &root)) { 2744 error = prepend_unreachable(&cwd, &buflen); 2745 if (error) 2746 goto out; 2747 } 2748 2749 error = -ERANGE; 2750 len = PAGE_SIZE + page - cwd; 2751 if (len <= size) { 2752 error = len; 2753 if (copy_to_user(buf, cwd, len)) 2754 error = -EFAULT; 2755 } 2756 } else { 2757 write_sequnlock(&rename_lock); 2758 } 2759 2760 out: 2761 path_put(&pwd); 2762 path_put(&root); 2763 free_page((unsigned long) page); 2764 return error; 2765 } 2766 2767 /* 2768 * Test whether new_dentry is a subdirectory of old_dentry. 2769 * 2770 * Trivially implemented using the dcache structure 2771 */ 2772 2773 /** 2774 * is_subdir - is new dentry a subdirectory of old_dentry 2775 * @new_dentry: new dentry 2776 * @old_dentry: old dentry 2777 * 2778 * Returns 1 if new_dentry is a subdirectory of the parent (at any depth). 2779 * Returns 0 otherwise. 2780 * Caller must ensure that "new_dentry" is pinned before calling is_subdir() 2781 */ 2782 2783 int is_subdir(struct dentry *new_dentry, struct dentry *old_dentry) 2784 { 2785 int result; 2786 unsigned seq; 2787 2788 if (new_dentry == old_dentry) 2789 return 1; 2790 2791 do { 2792 /* for restarting inner loop in case of seq retry */ 2793 seq = read_seqbegin(&rename_lock); 2794 /* 2795 * Need rcu_readlock to protect against the d_parent trashing 2796 * due to d_move 2797 */ 2798 rcu_read_lock(); 2799 if (d_ancestor(old_dentry, new_dentry)) 2800 result = 1; 2801 else 2802 result = 0; 2803 rcu_read_unlock(); 2804 } while (read_seqretry(&rename_lock, seq)); 2805 2806 return result; 2807 } 2808 2809 int path_is_under(struct path *path1, struct path *path2) 2810 { 2811 struct vfsmount *mnt = path1->mnt; 2812 struct dentry *dentry = path1->dentry; 2813 int res; 2814 2815 br_read_lock(vfsmount_lock); 2816 if (mnt != path2->mnt) { 2817 for (;;) { 2818 if (mnt->mnt_parent == mnt) { 2819 br_read_unlock(vfsmount_lock); 2820 return 0; 2821 } 2822 if (mnt->mnt_parent == path2->mnt) 2823 break; 2824 mnt = mnt->mnt_parent; 2825 } 2826 dentry = mnt->mnt_mountpoint; 2827 } 2828 res = is_subdir(dentry, path2->dentry); 2829 br_read_unlock(vfsmount_lock); 2830 return res; 2831 } 2832 EXPORT_SYMBOL(path_is_under); 2833 2834 void d_genocide(struct dentry *root) 2835 { 2836 struct dentry *this_parent; 2837 struct list_head *next; 2838 unsigned seq; 2839 int locked = 0; 2840 2841 seq = read_seqbegin(&rename_lock); 2842 again: 2843 this_parent = root; 2844 spin_lock(&this_parent->d_lock); 2845 repeat: 2846 next = this_parent->d_subdirs.next; 2847 resume: 2848 while (next != &this_parent->d_subdirs) { 2849 struct list_head *tmp = next; 2850 struct dentry *dentry = list_entry(tmp, struct dentry, d_u.d_child); 2851 next = tmp->next; 2852 2853 spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED); 2854 if (d_unhashed(dentry) || !dentry->d_inode) { 2855 spin_unlock(&dentry->d_lock); 2856 continue; 2857 } 2858 if (!list_empty(&dentry->d_subdirs)) { 2859 spin_unlock(&this_parent->d_lock); 2860 spin_release(&dentry->d_lock.dep_map, 1, _RET_IP_); 2861 this_parent = dentry; 2862 spin_acquire(&this_parent->d_lock.dep_map, 0, 1, _RET_IP_); 2863 goto repeat; 2864 } 2865 if (!(dentry->d_flags & DCACHE_GENOCIDE)) { 2866 dentry->d_flags |= DCACHE_GENOCIDE; 2867 dentry->d_count--; 2868 } 2869 spin_unlock(&dentry->d_lock); 2870 } 2871 if (this_parent != root) { 2872 struct dentry *child = this_parent; 2873 if (!(this_parent->d_flags & DCACHE_GENOCIDE)) { 2874 this_parent->d_flags |= DCACHE_GENOCIDE; 2875 this_parent->d_count--; 2876 } 2877 this_parent = try_to_ascend(this_parent, locked, seq); 2878 if (!this_parent) 2879 goto rename_retry; 2880 next = child->d_u.d_child.next; 2881 goto resume; 2882 } 2883 spin_unlock(&this_parent->d_lock); 2884 if (!locked && read_seqretry(&rename_lock, seq)) 2885 goto rename_retry; 2886 if (locked) 2887 write_sequnlock(&rename_lock); 2888 return; 2889 2890 rename_retry: 2891 locked = 1; 2892 write_seqlock(&rename_lock); 2893 goto again; 2894 } 2895 2896 /** 2897 * find_inode_number - check for dentry with name 2898 * @dir: directory to check 2899 * @name: Name to find. 2900 * 2901 * Check whether a dentry already exists for the given name, 2902 * and return the inode number if it has an inode. Otherwise 2903 * 0 is returned. 2904 * 2905 * This routine is used to post-process directory listings for 2906 * filesystems using synthetic inode numbers, and is necessary 2907 * to keep getcwd() working. 2908 */ 2909 2910 ino_t find_inode_number(struct dentry *dir, struct qstr *name) 2911 { 2912 struct dentry * dentry; 2913 ino_t ino = 0; 2914 2915 dentry = d_hash_and_lookup(dir, name); 2916 if (dentry) { 2917 if (dentry->d_inode) 2918 ino = dentry->d_inode->i_ino; 2919 dput(dentry); 2920 } 2921 return ino; 2922 } 2923 EXPORT_SYMBOL(find_inode_number); 2924 2925 static __initdata unsigned long dhash_entries; 2926 static int __init set_dhash_entries(char *str) 2927 { 2928 if (!str) 2929 return 0; 2930 dhash_entries = simple_strtoul(str, &str, 0); 2931 return 1; 2932 } 2933 __setup("dhash_entries=", set_dhash_entries); 2934 2935 static void __init dcache_init_early(void) 2936 { 2937 int loop; 2938 2939 /* If hashes are distributed across NUMA nodes, defer 2940 * hash allocation until vmalloc space is available. 2941 */ 2942 if (hashdist) 2943 return; 2944 2945 dentry_hashtable = 2946 alloc_large_system_hash("Dentry cache", 2947 sizeof(struct hlist_bl_head), 2948 dhash_entries, 2949 13, 2950 HASH_EARLY, 2951 &d_hash_shift, 2952 &d_hash_mask, 2953 0); 2954 2955 for (loop = 0; loop < (1 << d_hash_shift); loop++) 2956 INIT_HLIST_BL_HEAD(dentry_hashtable + loop); 2957 } 2958 2959 static void __init dcache_init(void) 2960 { 2961 int loop; 2962 2963 /* 2964 * A constructor could be added for stable state like the lists, 2965 * but it is probably not worth it because of the cache nature 2966 * of the dcache. 2967 */ 2968 dentry_cache = KMEM_CACHE(dentry, 2969 SLAB_RECLAIM_ACCOUNT|SLAB_PANIC|SLAB_MEM_SPREAD); 2970 2971 /* Hash may have been set up in dcache_init_early */ 2972 if (!hashdist) 2973 return; 2974 2975 dentry_hashtable = 2976 alloc_large_system_hash("Dentry cache", 2977 sizeof(struct hlist_bl_head), 2978 dhash_entries, 2979 13, 2980 0, 2981 &d_hash_shift, 2982 &d_hash_mask, 2983 0); 2984 2985 for (loop = 0; loop < (1 << d_hash_shift); loop++) 2986 INIT_HLIST_BL_HEAD(dentry_hashtable + loop); 2987 } 2988 2989 /* SLAB cache for __getname() consumers */ 2990 struct kmem_cache *names_cachep __read_mostly; 2991 EXPORT_SYMBOL(names_cachep); 2992 2993 EXPORT_SYMBOL(d_genocide); 2994 2995 void __init vfs_caches_init_early(void) 2996 { 2997 dcache_init_early(); 2998 inode_init_early(); 2999 } 3000 3001 void __init vfs_caches_init(unsigned long mempages) 3002 { 3003 unsigned long reserve; 3004 3005 /* Base hash sizes on available memory, with a reserve equal to 3006 150% of current kernel size */ 3007 3008 reserve = min((mempages - nr_free_pages()) * 3/2, mempages - 1); 3009 mempages -= reserve; 3010 3011 names_cachep = kmem_cache_create("names_cache", PATH_MAX, 0, 3012 SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL); 3013 3014 dcache_init(); 3015 inode_init(); 3016 files_init(mempages); 3017 mnt_init(); 3018 bdev_cache_init(); 3019 chrdev_init(); 3020 } 3021