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 "internal.h" 37 38 int sysctl_vfs_cache_pressure __read_mostly = 100; 39 EXPORT_SYMBOL_GPL(sysctl_vfs_cache_pressure); 40 41 __cacheline_aligned_in_smp DEFINE_SPINLOCK(dcache_lock); 42 __cacheline_aligned_in_smp DEFINE_SEQLOCK(rename_lock); 43 44 EXPORT_SYMBOL(dcache_lock); 45 46 static struct kmem_cache *dentry_cache __read_mostly; 47 48 #define DNAME_INLINE_LEN (sizeof(struct dentry)-offsetof(struct dentry,d_iname)) 49 50 /* 51 * This is the single most critical data structure when it comes 52 * to the dcache: the hashtable for lookups. Somebody should try 53 * to make this good - I've just made it work. 54 * 55 * This hash-function tries to avoid losing too many bits of hash 56 * information, yet avoid using a prime hash-size or similar. 57 */ 58 #define D_HASHBITS d_hash_shift 59 #define D_HASHMASK d_hash_mask 60 61 static unsigned int d_hash_mask __read_mostly; 62 static unsigned int d_hash_shift __read_mostly; 63 static struct hlist_head *dentry_hashtable __read_mostly; 64 65 /* Statistics gathering. */ 66 struct dentry_stat_t dentry_stat = { 67 .age_limit = 45, 68 }; 69 70 static void __d_free(struct dentry *dentry) 71 { 72 WARN_ON(!list_empty(&dentry->d_alias)); 73 if (dname_external(dentry)) 74 kfree(dentry->d_name.name); 75 kmem_cache_free(dentry_cache, dentry); 76 } 77 78 static void d_callback(struct rcu_head *head) 79 { 80 struct dentry * dentry = container_of(head, struct dentry, d_u.d_rcu); 81 __d_free(dentry); 82 } 83 84 /* 85 * no dcache_lock, please. The caller must decrement dentry_stat.nr_dentry 86 * inside dcache_lock. 87 */ 88 static void d_free(struct dentry *dentry) 89 { 90 if (dentry->d_op && dentry->d_op->d_release) 91 dentry->d_op->d_release(dentry); 92 /* if dentry was never inserted into hash, immediate free is OK */ 93 if (hlist_unhashed(&dentry->d_hash)) 94 __d_free(dentry); 95 else 96 call_rcu(&dentry->d_u.d_rcu, d_callback); 97 } 98 99 /* 100 * Release the dentry's inode, using the filesystem 101 * d_iput() operation if defined. 102 */ 103 static void dentry_iput(struct dentry * dentry) 104 __releases(dentry->d_lock) 105 __releases(dcache_lock) 106 { 107 struct inode *inode = dentry->d_inode; 108 if (inode) { 109 dentry->d_inode = NULL; 110 list_del_init(&dentry->d_alias); 111 spin_unlock(&dentry->d_lock); 112 spin_unlock(&dcache_lock); 113 if (!inode->i_nlink) 114 fsnotify_inoderemove(inode); 115 if (dentry->d_op && dentry->d_op->d_iput) 116 dentry->d_op->d_iput(dentry, inode); 117 else 118 iput(inode); 119 } else { 120 spin_unlock(&dentry->d_lock); 121 spin_unlock(&dcache_lock); 122 } 123 } 124 125 /* 126 * dentry_lru_(add|add_tail|del|del_init) must be called with dcache_lock held. 127 */ 128 static void dentry_lru_add(struct dentry *dentry) 129 { 130 list_add(&dentry->d_lru, &dentry->d_sb->s_dentry_lru); 131 dentry->d_sb->s_nr_dentry_unused++; 132 dentry_stat.nr_unused++; 133 } 134 135 static void dentry_lru_add_tail(struct dentry *dentry) 136 { 137 list_add_tail(&dentry->d_lru, &dentry->d_sb->s_dentry_lru); 138 dentry->d_sb->s_nr_dentry_unused++; 139 dentry_stat.nr_unused++; 140 } 141 142 static void dentry_lru_del(struct dentry *dentry) 143 { 144 if (!list_empty(&dentry->d_lru)) { 145 list_del(&dentry->d_lru); 146 dentry->d_sb->s_nr_dentry_unused--; 147 dentry_stat.nr_unused--; 148 } 149 } 150 151 static void dentry_lru_del_init(struct dentry *dentry) 152 { 153 if (likely(!list_empty(&dentry->d_lru))) { 154 list_del_init(&dentry->d_lru); 155 dentry->d_sb->s_nr_dentry_unused--; 156 dentry_stat.nr_unused--; 157 } 158 } 159 160 /** 161 * d_kill - kill dentry and return parent 162 * @dentry: dentry to kill 163 * 164 * The dentry must already be unhashed and removed from the LRU. 165 * 166 * If this is the root of the dentry tree, return NULL. 167 */ 168 static struct dentry *d_kill(struct dentry *dentry) 169 __releases(dentry->d_lock) 170 __releases(dcache_lock) 171 { 172 struct dentry *parent; 173 174 list_del(&dentry->d_u.d_child); 175 dentry_stat.nr_dentry--; /* For d_free, below */ 176 /*drops the locks, at that point nobody can reach this dentry */ 177 dentry_iput(dentry); 178 if (IS_ROOT(dentry)) 179 parent = NULL; 180 else 181 parent = dentry->d_parent; 182 d_free(dentry); 183 return parent; 184 } 185 186 /* 187 * This is dput 188 * 189 * This is complicated by the fact that we do not want to put 190 * dentries that are no longer on any hash chain on the unused 191 * list: we'd much rather just get rid of them immediately. 192 * 193 * However, that implies that we have to traverse the dentry 194 * tree upwards to the parents which might _also_ now be 195 * scheduled for deletion (it may have been only waiting for 196 * its last child to go away). 197 * 198 * This tail recursion is done by hand as we don't want to depend 199 * on the compiler to always get this right (gcc generally doesn't). 200 * Real recursion would eat up our stack space. 201 */ 202 203 /* 204 * dput - release a dentry 205 * @dentry: dentry to release 206 * 207 * Release a dentry. This will drop the usage count and if appropriate 208 * call the dentry unlink method as well as removing it from the queues and 209 * releasing its resources. If the parent dentries were scheduled for release 210 * they too may now get deleted. 211 * 212 * no dcache lock, please. 213 */ 214 215 void dput(struct dentry *dentry) 216 { 217 if (!dentry) 218 return; 219 220 repeat: 221 if (atomic_read(&dentry->d_count) == 1) 222 might_sleep(); 223 if (!atomic_dec_and_lock(&dentry->d_count, &dcache_lock)) 224 return; 225 226 spin_lock(&dentry->d_lock); 227 if (atomic_read(&dentry->d_count)) { 228 spin_unlock(&dentry->d_lock); 229 spin_unlock(&dcache_lock); 230 return; 231 } 232 233 /* 234 * AV: ->d_delete() is _NOT_ allowed to block now. 235 */ 236 if (dentry->d_op && dentry->d_op->d_delete) { 237 if (dentry->d_op->d_delete(dentry)) 238 goto unhash_it; 239 } 240 /* Unreachable? Get rid of it */ 241 if (d_unhashed(dentry)) 242 goto kill_it; 243 if (list_empty(&dentry->d_lru)) { 244 dentry->d_flags |= DCACHE_REFERENCED; 245 dentry_lru_add(dentry); 246 } 247 spin_unlock(&dentry->d_lock); 248 spin_unlock(&dcache_lock); 249 return; 250 251 unhash_it: 252 __d_drop(dentry); 253 kill_it: 254 /* if dentry was on the d_lru list delete it from there */ 255 dentry_lru_del(dentry); 256 dentry = d_kill(dentry); 257 if (dentry) 258 goto repeat; 259 } 260 EXPORT_SYMBOL(dput); 261 262 /** 263 * d_invalidate - invalidate a dentry 264 * @dentry: dentry to invalidate 265 * 266 * Try to invalidate the dentry if it turns out to be 267 * possible. If there are other dentries that can be 268 * reached through this one we can't delete it and we 269 * return -EBUSY. On success we return 0. 270 * 271 * no dcache lock. 272 */ 273 274 int d_invalidate(struct dentry * dentry) 275 { 276 /* 277 * If it's already been dropped, return OK. 278 */ 279 spin_lock(&dcache_lock); 280 if (d_unhashed(dentry)) { 281 spin_unlock(&dcache_lock); 282 return 0; 283 } 284 /* 285 * Check whether to do a partial shrink_dcache 286 * to get rid of unused child entries. 287 */ 288 if (!list_empty(&dentry->d_subdirs)) { 289 spin_unlock(&dcache_lock); 290 shrink_dcache_parent(dentry); 291 spin_lock(&dcache_lock); 292 } 293 294 /* 295 * Somebody else still using it? 296 * 297 * If it's a directory, we can't drop it 298 * for fear of somebody re-populating it 299 * with children (even though dropping it 300 * would make it unreachable from the root, 301 * we might still populate it if it was a 302 * working directory or similar). 303 */ 304 spin_lock(&dentry->d_lock); 305 if (atomic_read(&dentry->d_count) > 1) { 306 if (dentry->d_inode && S_ISDIR(dentry->d_inode->i_mode)) { 307 spin_unlock(&dentry->d_lock); 308 spin_unlock(&dcache_lock); 309 return -EBUSY; 310 } 311 } 312 313 __d_drop(dentry); 314 spin_unlock(&dentry->d_lock); 315 spin_unlock(&dcache_lock); 316 return 0; 317 } 318 EXPORT_SYMBOL(d_invalidate); 319 320 /* This should be called _only_ with dcache_lock held */ 321 322 static inline struct dentry * __dget_locked(struct dentry *dentry) 323 { 324 atomic_inc(&dentry->d_count); 325 dentry_lru_del_init(dentry); 326 return dentry; 327 } 328 329 struct dentry * dget_locked(struct dentry *dentry) 330 { 331 return __dget_locked(dentry); 332 } 333 EXPORT_SYMBOL(dget_locked); 334 335 /** 336 * d_find_alias - grab a hashed alias of inode 337 * @inode: inode in question 338 * @want_discon: flag, used by d_splice_alias, to request 339 * that only a DISCONNECTED alias be returned. 340 * 341 * If inode has a hashed alias, or is a directory and has any alias, 342 * acquire the reference to alias and return it. Otherwise return NULL. 343 * Notice that if inode is a directory there can be only one alias and 344 * it can be unhashed only if it has no children, or if it is the root 345 * of a filesystem. 346 * 347 * If the inode has an IS_ROOT, DCACHE_DISCONNECTED alias, then prefer 348 * any other hashed alias over that one unless @want_discon is set, 349 * in which case only return an IS_ROOT, DCACHE_DISCONNECTED alias. 350 */ 351 352 static struct dentry * __d_find_alias(struct inode *inode, int want_discon) 353 { 354 struct list_head *head, *next, *tmp; 355 struct dentry *alias, *discon_alias=NULL; 356 357 head = &inode->i_dentry; 358 next = inode->i_dentry.next; 359 while (next != head) { 360 tmp = next; 361 next = tmp->next; 362 prefetch(next); 363 alias = list_entry(tmp, struct dentry, d_alias); 364 if (S_ISDIR(inode->i_mode) || !d_unhashed(alias)) { 365 if (IS_ROOT(alias) && 366 (alias->d_flags & DCACHE_DISCONNECTED)) 367 discon_alias = alias; 368 else if (!want_discon) { 369 __dget_locked(alias); 370 return alias; 371 } 372 } 373 } 374 if (discon_alias) 375 __dget_locked(discon_alias); 376 return discon_alias; 377 } 378 379 struct dentry * d_find_alias(struct inode *inode) 380 { 381 struct dentry *de = NULL; 382 383 if (!list_empty(&inode->i_dentry)) { 384 spin_lock(&dcache_lock); 385 de = __d_find_alias(inode, 0); 386 spin_unlock(&dcache_lock); 387 } 388 return de; 389 } 390 EXPORT_SYMBOL(d_find_alias); 391 392 /* 393 * Try to kill dentries associated with this inode. 394 * WARNING: you must own a reference to inode. 395 */ 396 void d_prune_aliases(struct inode *inode) 397 { 398 struct dentry *dentry; 399 restart: 400 spin_lock(&dcache_lock); 401 list_for_each_entry(dentry, &inode->i_dentry, d_alias) { 402 spin_lock(&dentry->d_lock); 403 if (!atomic_read(&dentry->d_count)) { 404 __dget_locked(dentry); 405 __d_drop(dentry); 406 spin_unlock(&dentry->d_lock); 407 spin_unlock(&dcache_lock); 408 dput(dentry); 409 goto restart; 410 } 411 spin_unlock(&dentry->d_lock); 412 } 413 spin_unlock(&dcache_lock); 414 } 415 EXPORT_SYMBOL(d_prune_aliases); 416 417 /* 418 * Throw away a dentry - free the inode, dput the parent. This requires that 419 * the LRU list has already been removed. 420 * 421 * Try to prune ancestors as well. This is necessary to prevent 422 * quadratic behavior of shrink_dcache_parent(), but is also expected 423 * to be beneficial in reducing dentry cache fragmentation. 424 */ 425 static void prune_one_dentry(struct dentry * dentry) 426 __releases(dentry->d_lock) 427 __releases(dcache_lock) 428 __acquires(dcache_lock) 429 { 430 __d_drop(dentry); 431 dentry = d_kill(dentry); 432 433 /* 434 * Prune ancestors. Locking is simpler than in dput(), 435 * because dcache_lock needs to be taken anyway. 436 */ 437 spin_lock(&dcache_lock); 438 while (dentry) { 439 if (!atomic_dec_and_lock(&dentry->d_count, &dentry->d_lock)) 440 return; 441 442 if (dentry->d_op && dentry->d_op->d_delete) 443 dentry->d_op->d_delete(dentry); 444 dentry_lru_del_init(dentry); 445 __d_drop(dentry); 446 dentry = d_kill(dentry); 447 spin_lock(&dcache_lock); 448 } 449 } 450 451 /* 452 * Shrink the dentry LRU on a given superblock. 453 * @sb : superblock to shrink dentry LRU. 454 * @count: If count is NULL, we prune all dentries on superblock. 455 * @flags: If flags is non-zero, we need to do special processing based on 456 * which flags are set. This means we don't need to maintain multiple 457 * similar copies of this loop. 458 */ 459 static void __shrink_dcache_sb(struct super_block *sb, int *count, int flags) 460 { 461 LIST_HEAD(referenced); 462 LIST_HEAD(tmp); 463 struct dentry *dentry; 464 int cnt = 0; 465 466 BUG_ON(!sb); 467 BUG_ON((flags & DCACHE_REFERENCED) && count == NULL); 468 spin_lock(&dcache_lock); 469 if (count != NULL) 470 /* called from prune_dcache() and shrink_dcache_parent() */ 471 cnt = *count; 472 restart: 473 if (count == NULL) 474 list_splice_init(&sb->s_dentry_lru, &tmp); 475 else { 476 while (!list_empty(&sb->s_dentry_lru)) { 477 dentry = list_entry(sb->s_dentry_lru.prev, 478 struct dentry, d_lru); 479 BUG_ON(dentry->d_sb != sb); 480 481 spin_lock(&dentry->d_lock); 482 /* 483 * If we are honouring the DCACHE_REFERENCED flag and 484 * the dentry has this flag set, don't free it. Clear 485 * the flag and put it back on the LRU. 486 */ 487 if ((flags & DCACHE_REFERENCED) 488 && (dentry->d_flags & DCACHE_REFERENCED)) { 489 dentry->d_flags &= ~DCACHE_REFERENCED; 490 list_move(&dentry->d_lru, &referenced); 491 spin_unlock(&dentry->d_lock); 492 } else { 493 list_move_tail(&dentry->d_lru, &tmp); 494 spin_unlock(&dentry->d_lock); 495 cnt--; 496 if (!cnt) 497 break; 498 } 499 cond_resched_lock(&dcache_lock); 500 } 501 } 502 while (!list_empty(&tmp)) { 503 dentry = list_entry(tmp.prev, struct dentry, d_lru); 504 dentry_lru_del_init(dentry); 505 spin_lock(&dentry->d_lock); 506 /* 507 * We found an inuse dentry which was not removed from 508 * the LRU because of laziness during lookup. Do not free 509 * it - just keep it off the LRU list. 510 */ 511 if (atomic_read(&dentry->d_count)) { 512 spin_unlock(&dentry->d_lock); 513 continue; 514 } 515 prune_one_dentry(dentry); 516 /* dentry->d_lock was dropped in prune_one_dentry() */ 517 cond_resched_lock(&dcache_lock); 518 } 519 if (count == NULL && !list_empty(&sb->s_dentry_lru)) 520 goto restart; 521 if (count != NULL) 522 *count = cnt; 523 if (!list_empty(&referenced)) 524 list_splice(&referenced, &sb->s_dentry_lru); 525 spin_unlock(&dcache_lock); 526 } 527 528 /** 529 * prune_dcache - shrink the dcache 530 * @count: number of entries to try to free 531 * 532 * Shrink the dcache. This is done when we need more memory, or simply when we 533 * need to unmount something (at which point we need to unuse all dentries). 534 * 535 * This function may fail to free any resources if all the dentries are in use. 536 */ 537 static void prune_dcache(int count) 538 { 539 struct super_block *sb, *n; 540 int w_count; 541 int unused = dentry_stat.nr_unused; 542 int prune_ratio; 543 int pruned; 544 545 if (unused == 0 || count == 0) 546 return; 547 spin_lock(&dcache_lock); 548 if (count >= unused) 549 prune_ratio = 1; 550 else 551 prune_ratio = unused / count; 552 spin_lock(&sb_lock); 553 list_for_each_entry_safe(sb, n, &super_blocks, s_list) { 554 if (list_empty(&sb->s_instances)) 555 continue; 556 if (sb->s_nr_dentry_unused == 0) 557 continue; 558 sb->s_count++; 559 /* Now, we reclaim unused dentrins with fairness. 560 * We reclaim them same percentage from each superblock. 561 * We calculate number of dentries to scan on this sb 562 * as follows, but the implementation is arranged to avoid 563 * overflows: 564 * number of dentries to scan on this sb = 565 * count * (number of dentries on this sb / 566 * number of dentries in the machine) 567 */ 568 spin_unlock(&sb_lock); 569 if (prune_ratio != 1) 570 w_count = (sb->s_nr_dentry_unused / prune_ratio) + 1; 571 else 572 w_count = sb->s_nr_dentry_unused; 573 pruned = w_count; 574 /* 575 * We need to be sure this filesystem isn't being unmounted, 576 * otherwise we could race with generic_shutdown_super(), and 577 * end up holding a reference to an inode while the filesystem 578 * is unmounted. So we try to get s_umount, and make sure 579 * s_root isn't NULL. 580 */ 581 if (down_read_trylock(&sb->s_umount)) { 582 if ((sb->s_root != NULL) && 583 (!list_empty(&sb->s_dentry_lru))) { 584 spin_unlock(&dcache_lock); 585 __shrink_dcache_sb(sb, &w_count, 586 DCACHE_REFERENCED); 587 pruned -= w_count; 588 spin_lock(&dcache_lock); 589 } 590 up_read(&sb->s_umount); 591 } 592 spin_lock(&sb_lock); 593 count -= pruned; 594 __put_super(sb); 595 /* more work left to do? */ 596 if (count <= 0) 597 break; 598 } 599 spin_unlock(&sb_lock); 600 spin_unlock(&dcache_lock); 601 } 602 603 /** 604 * shrink_dcache_sb - shrink dcache for a superblock 605 * @sb: superblock 606 * 607 * Shrink the dcache for the specified super block. This 608 * is used to free the dcache before unmounting a file 609 * system 610 */ 611 void shrink_dcache_sb(struct super_block * sb) 612 { 613 __shrink_dcache_sb(sb, NULL, 0); 614 } 615 EXPORT_SYMBOL(shrink_dcache_sb); 616 617 /* 618 * destroy a single subtree of dentries for unmount 619 * - see the comments on shrink_dcache_for_umount() for a description of the 620 * locking 621 */ 622 static void shrink_dcache_for_umount_subtree(struct dentry *dentry) 623 { 624 struct dentry *parent; 625 unsigned detached = 0; 626 627 BUG_ON(!IS_ROOT(dentry)); 628 629 /* detach this root from the system */ 630 spin_lock(&dcache_lock); 631 dentry_lru_del_init(dentry); 632 __d_drop(dentry); 633 spin_unlock(&dcache_lock); 634 635 for (;;) { 636 /* descend to the first leaf in the current subtree */ 637 while (!list_empty(&dentry->d_subdirs)) { 638 struct dentry *loop; 639 640 /* this is a branch with children - detach all of them 641 * from the system in one go */ 642 spin_lock(&dcache_lock); 643 list_for_each_entry(loop, &dentry->d_subdirs, 644 d_u.d_child) { 645 dentry_lru_del_init(loop); 646 __d_drop(loop); 647 cond_resched_lock(&dcache_lock); 648 } 649 spin_unlock(&dcache_lock); 650 651 /* move to the first child */ 652 dentry = list_entry(dentry->d_subdirs.next, 653 struct dentry, d_u.d_child); 654 } 655 656 /* consume the dentries from this leaf up through its parents 657 * until we find one with children or run out altogether */ 658 do { 659 struct inode *inode; 660 661 if (atomic_read(&dentry->d_count) != 0) { 662 printk(KERN_ERR 663 "BUG: Dentry %p{i=%lx,n=%s}" 664 " still in use (%d)" 665 " [unmount of %s %s]\n", 666 dentry, 667 dentry->d_inode ? 668 dentry->d_inode->i_ino : 0UL, 669 dentry->d_name.name, 670 atomic_read(&dentry->d_count), 671 dentry->d_sb->s_type->name, 672 dentry->d_sb->s_id); 673 BUG(); 674 } 675 676 if (IS_ROOT(dentry)) 677 parent = NULL; 678 else { 679 parent = dentry->d_parent; 680 atomic_dec(&parent->d_count); 681 } 682 683 list_del(&dentry->d_u.d_child); 684 detached++; 685 686 inode = dentry->d_inode; 687 if (inode) { 688 dentry->d_inode = NULL; 689 list_del_init(&dentry->d_alias); 690 if (dentry->d_op && dentry->d_op->d_iput) 691 dentry->d_op->d_iput(dentry, inode); 692 else 693 iput(inode); 694 } 695 696 d_free(dentry); 697 698 /* finished when we fall off the top of the tree, 699 * otherwise we ascend to the parent and move to the 700 * next sibling if there is one */ 701 if (!parent) 702 goto out; 703 704 dentry = parent; 705 706 } while (list_empty(&dentry->d_subdirs)); 707 708 dentry = list_entry(dentry->d_subdirs.next, 709 struct dentry, d_u.d_child); 710 } 711 out: 712 /* several dentries were freed, need to correct nr_dentry */ 713 spin_lock(&dcache_lock); 714 dentry_stat.nr_dentry -= detached; 715 spin_unlock(&dcache_lock); 716 } 717 718 /* 719 * destroy the dentries attached to a superblock on unmounting 720 * - we don't need to use dentry->d_lock, and only need dcache_lock when 721 * removing the dentry from the system lists and hashes because: 722 * - the superblock is detached from all mountings and open files, so the 723 * dentry trees will not be rearranged by the VFS 724 * - s_umount is write-locked, so the memory pressure shrinker will ignore 725 * any dentries belonging to this superblock that it comes across 726 * - the filesystem itself is no longer permitted to rearrange the dentries 727 * in this superblock 728 */ 729 void shrink_dcache_for_umount(struct super_block *sb) 730 { 731 struct dentry *dentry; 732 733 if (down_read_trylock(&sb->s_umount)) 734 BUG(); 735 736 dentry = sb->s_root; 737 sb->s_root = NULL; 738 atomic_dec(&dentry->d_count); 739 shrink_dcache_for_umount_subtree(dentry); 740 741 while (!hlist_empty(&sb->s_anon)) { 742 dentry = hlist_entry(sb->s_anon.first, struct dentry, d_hash); 743 shrink_dcache_for_umount_subtree(dentry); 744 } 745 } 746 747 /* 748 * Search for at least 1 mount point in the dentry's subdirs. 749 * We descend to the next level whenever the d_subdirs 750 * list is non-empty and continue searching. 751 */ 752 753 /** 754 * have_submounts - check for mounts over a dentry 755 * @parent: dentry to check. 756 * 757 * Return true if the parent or its subdirectories contain 758 * a mount point 759 */ 760 761 int have_submounts(struct dentry *parent) 762 { 763 struct dentry *this_parent = parent; 764 struct list_head *next; 765 766 spin_lock(&dcache_lock); 767 if (d_mountpoint(parent)) 768 goto positive; 769 repeat: 770 next = this_parent->d_subdirs.next; 771 resume: 772 while (next != &this_parent->d_subdirs) { 773 struct list_head *tmp = next; 774 struct dentry *dentry = list_entry(tmp, struct dentry, d_u.d_child); 775 next = tmp->next; 776 /* Have we found a mount point ? */ 777 if (d_mountpoint(dentry)) 778 goto positive; 779 if (!list_empty(&dentry->d_subdirs)) { 780 this_parent = dentry; 781 goto repeat; 782 } 783 } 784 /* 785 * All done at this level ... ascend and resume the search. 786 */ 787 if (this_parent != parent) { 788 next = this_parent->d_u.d_child.next; 789 this_parent = this_parent->d_parent; 790 goto resume; 791 } 792 spin_unlock(&dcache_lock); 793 return 0; /* No mount points found in tree */ 794 positive: 795 spin_unlock(&dcache_lock); 796 return 1; 797 } 798 EXPORT_SYMBOL(have_submounts); 799 800 /* 801 * Search the dentry child list for the specified parent, 802 * and move any unused dentries to the end of the unused 803 * list for prune_dcache(). We descend to the next level 804 * whenever the d_subdirs list is non-empty and continue 805 * searching. 806 * 807 * It returns zero iff there are no unused children, 808 * otherwise it returns the number of children moved to 809 * the end of the unused list. This may not be the total 810 * number of unused children, because select_parent can 811 * drop the lock and return early due to latency 812 * constraints. 813 */ 814 static int select_parent(struct dentry * parent) 815 { 816 struct dentry *this_parent = parent; 817 struct list_head *next; 818 int found = 0; 819 820 spin_lock(&dcache_lock); 821 repeat: 822 next = this_parent->d_subdirs.next; 823 resume: 824 while (next != &this_parent->d_subdirs) { 825 struct list_head *tmp = next; 826 struct dentry *dentry = list_entry(tmp, struct dentry, d_u.d_child); 827 next = tmp->next; 828 829 dentry_lru_del_init(dentry); 830 /* 831 * move only zero ref count dentries to the end 832 * of the unused list for prune_dcache 833 */ 834 if (!atomic_read(&dentry->d_count)) { 835 dentry_lru_add_tail(dentry); 836 found++; 837 } 838 839 /* 840 * We can return to the caller if we have found some (this 841 * ensures forward progress). We'll be coming back to find 842 * the rest. 843 */ 844 if (found && need_resched()) 845 goto out; 846 847 /* 848 * Descend a level if the d_subdirs list is non-empty. 849 */ 850 if (!list_empty(&dentry->d_subdirs)) { 851 this_parent = dentry; 852 goto repeat; 853 } 854 } 855 /* 856 * All done at this level ... ascend and resume the search. 857 */ 858 if (this_parent != parent) { 859 next = this_parent->d_u.d_child.next; 860 this_parent = this_parent->d_parent; 861 goto resume; 862 } 863 out: 864 spin_unlock(&dcache_lock); 865 return found; 866 } 867 868 /** 869 * shrink_dcache_parent - prune dcache 870 * @parent: parent of entries to prune 871 * 872 * Prune the dcache to remove unused children of the parent dentry. 873 */ 874 875 void shrink_dcache_parent(struct dentry * parent) 876 { 877 struct super_block *sb = parent->d_sb; 878 int found; 879 880 while ((found = select_parent(parent)) != 0) 881 __shrink_dcache_sb(sb, &found, 0); 882 } 883 EXPORT_SYMBOL(shrink_dcache_parent); 884 885 /* 886 * Scan `nr' dentries and return the number which remain. 887 * 888 * We need to avoid reentering the filesystem if the caller is performing a 889 * GFP_NOFS allocation attempt. One example deadlock is: 890 * 891 * ext2_new_block->getblk->GFP->shrink_dcache_memory->prune_dcache-> 892 * prune_one_dentry->dput->dentry_iput->iput->inode->i_sb->s_op->put_inode-> 893 * ext2_discard_prealloc->ext2_free_blocks->lock_super->DEADLOCK. 894 * 895 * In this case we return -1 to tell the caller that we baled. 896 */ 897 static int shrink_dcache_memory(int nr, gfp_t gfp_mask) 898 { 899 if (nr) { 900 if (!(gfp_mask & __GFP_FS)) 901 return -1; 902 prune_dcache(nr); 903 } 904 return (dentry_stat.nr_unused / 100) * sysctl_vfs_cache_pressure; 905 } 906 907 static struct shrinker dcache_shrinker = { 908 .shrink = shrink_dcache_memory, 909 .seeks = DEFAULT_SEEKS, 910 }; 911 912 /** 913 * d_alloc - allocate a dcache entry 914 * @parent: parent of entry to allocate 915 * @name: qstr of the name 916 * 917 * Allocates a dentry. It returns %NULL if there is insufficient memory 918 * available. On a success the dentry is returned. The name passed in is 919 * copied and the copy passed in may be reused after this call. 920 */ 921 922 struct dentry *d_alloc(struct dentry * parent, const struct qstr *name) 923 { 924 struct dentry *dentry; 925 char *dname; 926 927 dentry = kmem_cache_alloc(dentry_cache, GFP_KERNEL); 928 if (!dentry) 929 return NULL; 930 931 if (name->len > DNAME_INLINE_LEN-1) { 932 dname = kmalloc(name->len + 1, GFP_KERNEL); 933 if (!dname) { 934 kmem_cache_free(dentry_cache, dentry); 935 return NULL; 936 } 937 } else { 938 dname = dentry->d_iname; 939 } 940 dentry->d_name.name = dname; 941 942 dentry->d_name.len = name->len; 943 dentry->d_name.hash = name->hash; 944 memcpy(dname, name->name, name->len); 945 dname[name->len] = 0; 946 947 atomic_set(&dentry->d_count, 1); 948 dentry->d_flags = DCACHE_UNHASHED; 949 spin_lock_init(&dentry->d_lock); 950 dentry->d_inode = NULL; 951 dentry->d_parent = NULL; 952 dentry->d_sb = NULL; 953 dentry->d_op = NULL; 954 dentry->d_fsdata = NULL; 955 dentry->d_mounted = 0; 956 INIT_HLIST_NODE(&dentry->d_hash); 957 INIT_LIST_HEAD(&dentry->d_lru); 958 INIT_LIST_HEAD(&dentry->d_subdirs); 959 INIT_LIST_HEAD(&dentry->d_alias); 960 961 if (parent) { 962 dentry->d_parent = dget(parent); 963 dentry->d_sb = parent->d_sb; 964 } else { 965 INIT_LIST_HEAD(&dentry->d_u.d_child); 966 } 967 968 spin_lock(&dcache_lock); 969 if (parent) 970 list_add(&dentry->d_u.d_child, &parent->d_subdirs); 971 dentry_stat.nr_dentry++; 972 spin_unlock(&dcache_lock); 973 974 return dentry; 975 } 976 EXPORT_SYMBOL(d_alloc); 977 978 struct dentry *d_alloc_name(struct dentry *parent, const char *name) 979 { 980 struct qstr q; 981 982 q.name = name; 983 q.len = strlen(name); 984 q.hash = full_name_hash(q.name, q.len); 985 return d_alloc(parent, &q); 986 } 987 EXPORT_SYMBOL(d_alloc_name); 988 989 /* the caller must hold dcache_lock */ 990 static void __d_instantiate(struct dentry *dentry, struct inode *inode) 991 { 992 if (inode) 993 list_add(&dentry->d_alias, &inode->i_dentry); 994 dentry->d_inode = inode; 995 fsnotify_d_instantiate(dentry, inode); 996 } 997 998 /** 999 * d_instantiate - fill in inode information for a dentry 1000 * @entry: dentry to complete 1001 * @inode: inode to attach to this dentry 1002 * 1003 * Fill in inode information in the entry. 1004 * 1005 * This turns negative dentries into productive full members 1006 * of society. 1007 * 1008 * NOTE! This assumes that the inode count has been incremented 1009 * (or otherwise set) by the caller to indicate that it is now 1010 * in use by the dcache. 1011 */ 1012 1013 void d_instantiate(struct dentry *entry, struct inode * inode) 1014 { 1015 BUG_ON(!list_empty(&entry->d_alias)); 1016 spin_lock(&dcache_lock); 1017 __d_instantiate(entry, inode); 1018 spin_unlock(&dcache_lock); 1019 security_d_instantiate(entry, inode); 1020 } 1021 EXPORT_SYMBOL(d_instantiate); 1022 1023 /** 1024 * d_instantiate_unique - instantiate a non-aliased dentry 1025 * @entry: dentry to instantiate 1026 * @inode: inode to attach to this dentry 1027 * 1028 * Fill in inode information in the entry. On success, it returns NULL. 1029 * If an unhashed alias of "entry" already exists, then we return the 1030 * aliased dentry instead and drop one reference to inode. 1031 * 1032 * Note that in order to avoid conflicts with rename() etc, the caller 1033 * had better be holding the parent directory semaphore. 1034 * 1035 * This also assumes that the inode count has been incremented 1036 * (or otherwise set) by the caller to indicate that it is now 1037 * in use by the dcache. 1038 */ 1039 static struct dentry *__d_instantiate_unique(struct dentry *entry, 1040 struct inode *inode) 1041 { 1042 struct dentry *alias; 1043 int len = entry->d_name.len; 1044 const char *name = entry->d_name.name; 1045 unsigned int hash = entry->d_name.hash; 1046 1047 if (!inode) { 1048 __d_instantiate(entry, NULL); 1049 return NULL; 1050 } 1051 1052 list_for_each_entry(alias, &inode->i_dentry, d_alias) { 1053 struct qstr *qstr = &alias->d_name; 1054 1055 if (qstr->hash != hash) 1056 continue; 1057 if (alias->d_parent != entry->d_parent) 1058 continue; 1059 if (qstr->len != len) 1060 continue; 1061 if (memcmp(qstr->name, name, len)) 1062 continue; 1063 dget_locked(alias); 1064 return alias; 1065 } 1066 1067 __d_instantiate(entry, inode); 1068 return NULL; 1069 } 1070 1071 struct dentry *d_instantiate_unique(struct dentry *entry, struct inode *inode) 1072 { 1073 struct dentry *result; 1074 1075 BUG_ON(!list_empty(&entry->d_alias)); 1076 1077 spin_lock(&dcache_lock); 1078 result = __d_instantiate_unique(entry, inode); 1079 spin_unlock(&dcache_lock); 1080 1081 if (!result) { 1082 security_d_instantiate(entry, inode); 1083 return NULL; 1084 } 1085 1086 BUG_ON(!d_unhashed(result)); 1087 iput(inode); 1088 return result; 1089 } 1090 1091 EXPORT_SYMBOL(d_instantiate_unique); 1092 1093 /** 1094 * d_alloc_root - allocate root dentry 1095 * @root_inode: inode to allocate the root for 1096 * 1097 * Allocate a root ("/") dentry for the inode given. The inode is 1098 * instantiated and returned. %NULL is returned if there is insufficient 1099 * memory or the inode passed is %NULL. 1100 */ 1101 1102 struct dentry * d_alloc_root(struct inode * root_inode) 1103 { 1104 struct dentry *res = NULL; 1105 1106 if (root_inode) { 1107 static const struct qstr name = { .name = "/", .len = 1 }; 1108 1109 res = d_alloc(NULL, &name); 1110 if (res) { 1111 res->d_sb = root_inode->i_sb; 1112 res->d_parent = res; 1113 d_instantiate(res, root_inode); 1114 } 1115 } 1116 return res; 1117 } 1118 EXPORT_SYMBOL(d_alloc_root); 1119 1120 static inline struct hlist_head *d_hash(struct dentry *parent, 1121 unsigned long hash) 1122 { 1123 hash += ((unsigned long) parent ^ GOLDEN_RATIO_PRIME) / L1_CACHE_BYTES; 1124 hash = hash ^ ((hash ^ GOLDEN_RATIO_PRIME) >> D_HASHBITS); 1125 return dentry_hashtable + (hash & D_HASHMASK); 1126 } 1127 1128 /** 1129 * d_obtain_alias - find or allocate a dentry for a given inode 1130 * @inode: inode to allocate the dentry for 1131 * 1132 * Obtain a dentry for an inode resulting from NFS filehandle conversion or 1133 * similar open by handle operations. The returned dentry may be anonymous, 1134 * or may have a full name (if the inode was already in the cache). 1135 * 1136 * When called on a directory inode, we must ensure that the inode only ever 1137 * has one dentry. If a dentry is found, that is returned instead of 1138 * allocating a new one. 1139 * 1140 * On successful return, the reference to the inode has been transferred 1141 * to the dentry. In case of an error the reference on the inode is released. 1142 * To make it easier to use in export operations a %NULL or IS_ERR inode may 1143 * be passed in and will be the error will be propagate to the return value, 1144 * with a %NULL @inode replaced by ERR_PTR(-ESTALE). 1145 */ 1146 struct dentry *d_obtain_alias(struct inode *inode) 1147 { 1148 static const struct qstr anonstring = { .name = "" }; 1149 struct dentry *tmp; 1150 struct dentry *res; 1151 1152 if (!inode) 1153 return ERR_PTR(-ESTALE); 1154 if (IS_ERR(inode)) 1155 return ERR_CAST(inode); 1156 1157 res = d_find_alias(inode); 1158 if (res) 1159 goto out_iput; 1160 1161 tmp = d_alloc(NULL, &anonstring); 1162 if (!tmp) { 1163 res = ERR_PTR(-ENOMEM); 1164 goto out_iput; 1165 } 1166 tmp->d_parent = tmp; /* make sure dput doesn't croak */ 1167 1168 spin_lock(&dcache_lock); 1169 res = __d_find_alias(inode, 0); 1170 if (res) { 1171 spin_unlock(&dcache_lock); 1172 dput(tmp); 1173 goto out_iput; 1174 } 1175 1176 /* attach a disconnected dentry */ 1177 spin_lock(&tmp->d_lock); 1178 tmp->d_sb = inode->i_sb; 1179 tmp->d_inode = inode; 1180 tmp->d_flags |= DCACHE_DISCONNECTED; 1181 tmp->d_flags &= ~DCACHE_UNHASHED; 1182 list_add(&tmp->d_alias, &inode->i_dentry); 1183 hlist_add_head(&tmp->d_hash, &inode->i_sb->s_anon); 1184 spin_unlock(&tmp->d_lock); 1185 1186 spin_unlock(&dcache_lock); 1187 return tmp; 1188 1189 out_iput: 1190 iput(inode); 1191 return res; 1192 } 1193 EXPORT_SYMBOL(d_obtain_alias); 1194 1195 /** 1196 * d_splice_alias - splice a disconnected dentry into the tree if one exists 1197 * @inode: the inode which may have a disconnected dentry 1198 * @dentry: a negative dentry which we want to point to the inode. 1199 * 1200 * If inode is a directory and has a 'disconnected' dentry (i.e. IS_ROOT and 1201 * DCACHE_DISCONNECTED), then d_move that in place of the given dentry 1202 * and return it, else simply d_add the inode to the dentry and return NULL. 1203 * 1204 * This is needed in the lookup routine of any filesystem that is exportable 1205 * (via knfsd) so that we can build dcache paths to directories effectively. 1206 * 1207 * If a dentry was found and moved, then it is returned. Otherwise NULL 1208 * is returned. This matches the expected return value of ->lookup. 1209 * 1210 */ 1211 struct dentry *d_splice_alias(struct inode *inode, struct dentry *dentry) 1212 { 1213 struct dentry *new = NULL; 1214 1215 if (inode && S_ISDIR(inode->i_mode)) { 1216 spin_lock(&dcache_lock); 1217 new = __d_find_alias(inode, 1); 1218 if (new) { 1219 BUG_ON(!(new->d_flags & DCACHE_DISCONNECTED)); 1220 spin_unlock(&dcache_lock); 1221 security_d_instantiate(new, inode); 1222 d_move(new, dentry); 1223 iput(inode); 1224 } else { 1225 /* already taking dcache_lock, so d_add() by hand */ 1226 __d_instantiate(dentry, inode); 1227 spin_unlock(&dcache_lock); 1228 security_d_instantiate(dentry, inode); 1229 d_rehash(dentry); 1230 } 1231 } else 1232 d_add(dentry, inode); 1233 return new; 1234 } 1235 EXPORT_SYMBOL(d_splice_alias); 1236 1237 /** 1238 * d_add_ci - lookup or allocate new dentry with case-exact name 1239 * @inode: the inode case-insensitive lookup has found 1240 * @dentry: the negative dentry that was passed to the parent's lookup func 1241 * @name: the case-exact name to be associated with the returned dentry 1242 * 1243 * This is to avoid filling the dcache with case-insensitive names to the 1244 * same inode, only the actual correct case is stored in the dcache for 1245 * case-insensitive filesystems. 1246 * 1247 * For a case-insensitive lookup match and if the the case-exact dentry 1248 * already exists in in the dcache, use it and return it. 1249 * 1250 * If no entry exists with the exact case name, allocate new dentry with 1251 * the exact case, and return the spliced entry. 1252 */ 1253 struct dentry *d_add_ci(struct dentry *dentry, struct inode *inode, 1254 struct qstr *name) 1255 { 1256 int error; 1257 struct dentry *found; 1258 struct dentry *new; 1259 1260 /* 1261 * First check if a dentry matching the name already exists, 1262 * if not go ahead and create it now. 1263 */ 1264 found = d_hash_and_lookup(dentry->d_parent, name); 1265 if (!found) { 1266 new = d_alloc(dentry->d_parent, name); 1267 if (!new) { 1268 error = -ENOMEM; 1269 goto err_out; 1270 } 1271 1272 found = d_splice_alias(inode, new); 1273 if (found) { 1274 dput(new); 1275 return found; 1276 } 1277 return new; 1278 } 1279 1280 /* 1281 * If a matching dentry exists, and it's not negative use it. 1282 * 1283 * Decrement the reference count to balance the iget() done 1284 * earlier on. 1285 */ 1286 if (found->d_inode) { 1287 if (unlikely(found->d_inode != inode)) { 1288 /* This can't happen because bad inodes are unhashed. */ 1289 BUG_ON(!is_bad_inode(inode)); 1290 BUG_ON(!is_bad_inode(found->d_inode)); 1291 } 1292 iput(inode); 1293 return found; 1294 } 1295 1296 /* 1297 * Negative dentry: instantiate it unless the inode is a directory and 1298 * already has a dentry. 1299 */ 1300 spin_lock(&dcache_lock); 1301 if (!S_ISDIR(inode->i_mode) || list_empty(&inode->i_dentry)) { 1302 __d_instantiate(found, inode); 1303 spin_unlock(&dcache_lock); 1304 security_d_instantiate(found, inode); 1305 return found; 1306 } 1307 1308 /* 1309 * In case a directory already has a (disconnected) entry grab a 1310 * reference to it, move it in place and use it. 1311 */ 1312 new = list_entry(inode->i_dentry.next, struct dentry, d_alias); 1313 dget_locked(new); 1314 spin_unlock(&dcache_lock); 1315 security_d_instantiate(found, inode); 1316 d_move(new, found); 1317 iput(inode); 1318 dput(found); 1319 return new; 1320 1321 err_out: 1322 iput(inode); 1323 return ERR_PTR(error); 1324 } 1325 EXPORT_SYMBOL(d_add_ci); 1326 1327 /** 1328 * d_lookup - search for a dentry 1329 * @parent: parent dentry 1330 * @name: qstr of name we wish to find 1331 * 1332 * Searches the children of the parent dentry for the name in question. If 1333 * the dentry is found its reference count is incremented and the dentry 1334 * is returned. The caller must use dput to free the entry when it has 1335 * finished using it. %NULL is returned on failure. 1336 * 1337 * __d_lookup is dcache_lock free. The hash list is protected using RCU. 1338 * Memory barriers are used while updating and doing lockless traversal. 1339 * To avoid races with d_move while rename is happening, d_lock is used. 1340 * 1341 * Overflows in memcmp(), while d_move, are avoided by keeping the length 1342 * and name pointer in one structure pointed by d_qstr. 1343 * 1344 * rcu_read_lock() and rcu_read_unlock() are used to disable preemption while 1345 * lookup is going on. 1346 * 1347 * The dentry unused LRU is not updated even if lookup finds the required dentry 1348 * in there. It is updated in places such as prune_dcache, shrink_dcache_sb, 1349 * select_parent and __dget_locked. This laziness saves lookup from dcache_lock 1350 * acquisition. 1351 * 1352 * d_lookup() is protected against the concurrent renames in some unrelated 1353 * directory using the seqlockt_t rename_lock. 1354 */ 1355 1356 struct dentry * d_lookup(struct dentry * parent, struct qstr * name) 1357 { 1358 struct dentry * dentry = NULL; 1359 unsigned long seq; 1360 1361 do { 1362 seq = read_seqbegin(&rename_lock); 1363 dentry = __d_lookup(parent, name); 1364 if (dentry) 1365 break; 1366 } while (read_seqretry(&rename_lock, seq)); 1367 return dentry; 1368 } 1369 EXPORT_SYMBOL(d_lookup); 1370 1371 struct dentry * __d_lookup(struct dentry * parent, struct qstr * name) 1372 { 1373 unsigned int len = name->len; 1374 unsigned int hash = name->hash; 1375 const unsigned char *str = name->name; 1376 struct hlist_head *head = d_hash(parent,hash); 1377 struct dentry *found = NULL; 1378 struct hlist_node *node; 1379 struct dentry *dentry; 1380 1381 rcu_read_lock(); 1382 1383 hlist_for_each_entry_rcu(dentry, node, head, d_hash) { 1384 struct qstr *qstr; 1385 1386 if (dentry->d_name.hash != hash) 1387 continue; 1388 if (dentry->d_parent != parent) 1389 continue; 1390 1391 spin_lock(&dentry->d_lock); 1392 1393 /* 1394 * Recheck the dentry after taking the lock - d_move may have 1395 * changed things. Don't bother checking the hash because we're 1396 * about to compare the whole name anyway. 1397 */ 1398 if (dentry->d_parent != parent) 1399 goto next; 1400 1401 /* non-existing due to RCU? */ 1402 if (d_unhashed(dentry)) 1403 goto next; 1404 1405 /* 1406 * It is safe to compare names since d_move() cannot 1407 * change the qstr (protected by d_lock). 1408 */ 1409 qstr = &dentry->d_name; 1410 if (parent->d_op && parent->d_op->d_compare) { 1411 if (parent->d_op->d_compare(parent, qstr, name)) 1412 goto next; 1413 } else { 1414 if (qstr->len != len) 1415 goto next; 1416 if (memcmp(qstr->name, str, len)) 1417 goto next; 1418 } 1419 1420 atomic_inc(&dentry->d_count); 1421 found = dentry; 1422 spin_unlock(&dentry->d_lock); 1423 break; 1424 next: 1425 spin_unlock(&dentry->d_lock); 1426 } 1427 rcu_read_unlock(); 1428 1429 return found; 1430 } 1431 1432 /** 1433 * d_hash_and_lookup - hash the qstr then search for a dentry 1434 * @dir: Directory to search in 1435 * @name: qstr of name we wish to find 1436 * 1437 * On hash failure or on lookup failure NULL is returned. 1438 */ 1439 struct dentry *d_hash_and_lookup(struct dentry *dir, struct qstr *name) 1440 { 1441 struct dentry *dentry = NULL; 1442 1443 /* 1444 * Check for a fs-specific hash function. Note that we must 1445 * calculate the standard hash first, as the d_op->d_hash() 1446 * routine may choose to leave the hash value unchanged. 1447 */ 1448 name->hash = full_name_hash(name->name, name->len); 1449 if (dir->d_op && dir->d_op->d_hash) { 1450 if (dir->d_op->d_hash(dir, name) < 0) 1451 goto out; 1452 } 1453 dentry = d_lookup(dir, name); 1454 out: 1455 return dentry; 1456 } 1457 1458 /** 1459 * d_validate - verify dentry provided from insecure source 1460 * @dentry: The dentry alleged to be valid child of @dparent 1461 * @dparent: The parent dentry (known to be valid) 1462 * 1463 * An insecure source has sent us a dentry, here we verify it and dget() it. 1464 * This is used by ncpfs in its readdir implementation. 1465 * Zero is returned in the dentry is invalid. 1466 */ 1467 1468 int d_validate(struct dentry *dentry, struct dentry *dparent) 1469 { 1470 struct hlist_head *base; 1471 struct hlist_node *lhp; 1472 1473 /* Check whether the ptr might be valid at all.. */ 1474 if (!kmem_ptr_validate(dentry_cache, dentry)) 1475 goto out; 1476 1477 if (dentry->d_parent != dparent) 1478 goto out; 1479 1480 spin_lock(&dcache_lock); 1481 base = d_hash(dparent, dentry->d_name.hash); 1482 hlist_for_each(lhp,base) { 1483 /* hlist_for_each_entry_rcu() not required for d_hash list 1484 * as it is parsed under dcache_lock 1485 */ 1486 if (dentry == hlist_entry(lhp, struct dentry, d_hash)) { 1487 __dget_locked(dentry); 1488 spin_unlock(&dcache_lock); 1489 return 1; 1490 } 1491 } 1492 spin_unlock(&dcache_lock); 1493 out: 1494 return 0; 1495 } 1496 EXPORT_SYMBOL(d_validate); 1497 1498 /* 1499 * When a file is deleted, we have two options: 1500 * - turn this dentry into a negative dentry 1501 * - unhash this dentry and free it. 1502 * 1503 * Usually, we want to just turn this into 1504 * a negative dentry, but if anybody else is 1505 * currently using the dentry or the inode 1506 * we can't do that and we fall back on removing 1507 * it from the hash queues and waiting for 1508 * it to be deleted later when it has no users 1509 */ 1510 1511 /** 1512 * d_delete - delete a dentry 1513 * @dentry: The dentry to delete 1514 * 1515 * Turn the dentry into a negative dentry if possible, otherwise 1516 * remove it from the hash queues so it can be deleted later 1517 */ 1518 1519 void d_delete(struct dentry * dentry) 1520 { 1521 int isdir = 0; 1522 /* 1523 * Are we the only user? 1524 */ 1525 spin_lock(&dcache_lock); 1526 spin_lock(&dentry->d_lock); 1527 isdir = S_ISDIR(dentry->d_inode->i_mode); 1528 if (atomic_read(&dentry->d_count) == 1) { 1529 dentry->d_flags &= ~DCACHE_CANT_MOUNT; 1530 dentry_iput(dentry); 1531 fsnotify_nameremove(dentry, isdir); 1532 return; 1533 } 1534 1535 if (!d_unhashed(dentry)) 1536 __d_drop(dentry); 1537 1538 spin_unlock(&dentry->d_lock); 1539 spin_unlock(&dcache_lock); 1540 1541 fsnotify_nameremove(dentry, isdir); 1542 } 1543 EXPORT_SYMBOL(d_delete); 1544 1545 static void __d_rehash(struct dentry * entry, struct hlist_head *list) 1546 { 1547 1548 entry->d_flags &= ~DCACHE_UNHASHED; 1549 hlist_add_head_rcu(&entry->d_hash, list); 1550 } 1551 1552 static void _d_rehash(struct dentry * entry) 1553 { 1554 __d_rehash(entry, d_hash(entry->d_parent, entry->d_name.hash)); 1555 } 1556 1557 /** 1558 * d_rehash - add an entry back to the hash 1559 * @entry: dentry to add to the hash 1560 * 1561 * Adds a dentry to the hash according to its name. 1562 */ 1563 1564 void d_rehash(struct dentry * entry) 1565 { 1566 spin_lock(&dcache_lock); 1567 spin_lock(&entry->d_lock); 1568 _d_rehash(entry); 1569 spin_unlock(&entry->d_lock); 1570 spin_unlock(&dcache_lock); 1571 } 1572 EXPORT_SYMBOL(d_rehash); 1573 1574 /* 1575 * When switching names, the actual string doesn't strictly have to 1576 * be preserved in the target - because we're dropping the target 1577 * anyway. As such, we can just do a simple memcpy() to copy over 1578 * the new name before we switch. 1579 * 1580 * Note that we have to be a lot more careful about getting the hash 1581 * switched - we have to switch the hash value properly even if it 1582 * then no longer matches the actual (corrupted) string of the target. 1583 * The hash value has to match the hash queue that the dentry is on.. 1584 */ 1585 static void switch_names(struct dentry *dentry, struct dentry *target) 1586 { 1587 if (dname_external(target)) { 1588 if (dname_external(dentry)) { 1589 /* 1590 * Both external: swap the pointers 1591 */ 1592 swap(target->d_name.name, dentry->d_name.name); 1593 } else { 1594 /* 1595 * dentry:internal, target:external. Steal target's 1596 * storage and make target internal. 1597 */ 1598 memcpy(target->d_iname, dentry->d_name.name, 1599 dentry->d_name.len + 1); 1600 dentry->d_name.name = target->d_name.name; 1601 target->d_name.name = target->d_iname; 1602 } 1603 } else { 1604 if (dname_external(dentry)) { 1605 /* 1606 * dentry:external, target:internal. Give dentry's 1607 * storage to target and make dentry internal 1608 */ 1609 memcpy(dentry->d_iname, target->d_name.name, 1610 target->d_name.len + 1); 1611 target->d_name.name = dentry->d_name.name; 1612 dentry->d_name.name = dentry->d_iname; 1613 } else { 1614 /* 1615 * Both are internal. Just copy target to dentry 1616 */ 1617 memcpy(dentry->d_iname, target->d_name.name, 1618 target->d_name.len + 1); 1619 dentry->d_name.len = target->d_name.len; 1620 return; 1621 } 1622 } 1623 swap(dentry->d_name.len, target->d_name.len); 1624 } 1625 1626 /* 1627 * We cannibalize "target" when moving dentry on top of it, 1628 * because it's going to be thrown away anyway. We could be more 1629 * polite about it, though. 1630 * 1631 * This forceful removal will result in ugly /proc output if 1632 * somebody holds a file open that got deleted due to a rename. 1633 * We could be nicer about the deleted file, and let it show 1634 * up under the name it had before it was deleted rather than 1635 * under the original name of the file that was moved on top of it. 1636 */ 1637 1638 /* 1639 * d_move_locked - move a dentry 1640 * @dentry: entry to move 1641 * @target: new dentry 1642 * 1643 * Update the dcache to reflect the move of a file name. Negative 1644 * dcache entries should not be moved in this way. 1645 */ 1646 static void d_move_locked(struct dentry * dentry, struct dentry * target) 1647 { 1648 struct hlist_head *list; 1649 1650 if (!dentry->d_inode) 1651 printk(KERN_WARNING "VFS: moving negative dcache entry\n"); 1652 1653 write_seqlock(&rename_lock); 1654 /* 1655 * XXXX: do we really need to take target->d_lock? 1656 */ 1657 if (target < dentry) { 1658 spin_lock(&target->d_lock); 1659 spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED); 1660 } else { 1661 spin_lock(&dentry->d_lock); 1662 spin_lock_nested(&target->d_lock, DENTRY_D_LOCK_NESTED); 1663 } 1664 1665 /* Move the dentry to the target hash queue, if on different bucket */ 1666 if (d_unhashed(dentry)) 1667 goto already_unhashed; 1668 1669 hlist_del_rcu(&dentry->d_hash); 1670 1671 already_unhashed: 1672 list = d_hash(target->d_parent, target->d_name.hash); 1673 __d_rehash(dentry, list); 1674 1675 /* Unhash the target: dput() will then get rid of it */ 1676 __d_drop(target); 1677 1678 list_del(&dentry->d_u.d_child); 1679 list_del(&target->d_u.d_child); 1680 1681 /* Switch the names.. */ 1682 switch_names(dentry, target); 1683 swap(dentry->d_name.hash, target->d_name.hash); 1684 1685 /* ... and switch the parents */ 1686 if (IS_ROOT(dentry)) { 1687 dentry->d_parent = target->d_parent; 1688 target->d_parent = target; 1689 INIT_LIST_HEAD(&target->d_u.d_child); 1690 } else { 1691 swap(dentry->d_parent, target->d_parent); 1692 1693 /* And add them back to the (new) parent lists */ 1694 list_add(&target->d_u.d_child, &target->d_parent->d_subdirs); 1695 } 1696 1697 list_add(&dentry->d_u.d_child, &dentry->d_parent->d_subdirs); 1698 spin_unlock(&target->d_lock); 1699 fsnotify_d_move(dentry); 1700 spin_unlock(&dentry->d_lock); 1701 write_sequnlock(&rename_lock); 1702 } 1703 1704 /** 1705 * d_move - move a dentry 1706 * @dentry: entry to move 1707 * @target: new dentry 1708 * 1709 * Update the dcache to reflect the move of a file name. Negative 1710 * dcache entries should not be moved in this way. 1711 */ 1712 1713 void d_move(struct dentry * dentry, struct dentry * target) 1714 { 1715 spin_lock(&dcache_lock); 1716 d_move_locked(dentry, target); 1717 spin_unlock(&dcache_lock); 1718 } 1719 EXPORT_SYMBOL(d_move); 1720 1721 /** 1722 * d_ancestor - search for an ancestor 1723 * @p1: ancestor dentry 1724 * @p2: child dentry 1725 * 1726 * Returns the ancestor dentry of p2 which is a child of p1, if p1 is 1727 * an ancestor of p2, else NULL. 1728 */ 1729 struct dentry *d_ancestor(struct dentry *p1, struct dentry *p2) 1730 { 1731 struct dentry *p; 1732 1733 for (p = p2; !IS_ROOT(p); p = p->d_parent) { 1734 if (p->d_parent == p1) 1735 return p; 1736 } 1737 return NULL; 1738 } 1739 1740 /* 1741 * This helper attempts to cope with remotely renamed directories 1742 * 1743 * It assumes that the caller is already holding 1744 * dentry->d_parent->d_inode->i_mutex and the dcache_lock 1745 * 1746 * Note: If ever the locking in lock_rename() changes, then please 1747 * remember to update this too... 1748 */ 1749 static struct dentry *__d_unalias(struct dentry *dentry, struct dentry *alias) 1750 __releases(dcache_lock) 1751 { 1752 struct mutex *m1 = NULL, *m2 = NULL; 1753 struct dentry *ret; 1754 1755 /* If alias and dentry share a parent, then no extra locks required */ 1756 if (alias->d_parent == dentry->d_parent) 1757 goto out_unalias; 1758 1759 /* Check for loops */ 1760 ret = ERR_PTR(-ELOOP); 1761 if (d_ancestor(alias, dentry)) 1762 goto out_err; 1763 1764 /* See lock_rename() */ 1765 ret = ERR_PTR(-EBUSY); 1766 if (!mutex_trylock(&dentry->d_sb->s_vfs_rename_mutex)) 1767 goto out_err; 1768 m1 = &dentry->d_sb->s_vfs_rename_mutex; 1769 if (!mutex_trylock(&alias->d_parent->d_inode->i_mutex)) 1770 goto out_err; 1771 m2 = &alias->d_parent->d_inode->i_mutex; 1772 out_unalias: 1773 d_move_locked(alias, dentry); 1774 ret = alias; 1775 out_err: 1776 spin_unlock(&dcache_lock); 1777 if (m2) 1778 mutex_unlock(m2); 1779 if (m1) 1780 mutex_unlock(m1); 1781 return ret; 1782 } 1783 1784 /* 1785 * Prepare an anonymous dentry for life in the superblock's dentry tree as a 1786 * named dentry in place of the dentry to be replaced. 1787 */ 1788 static void __d_materialise_dentry(struct dentry *dentry, struct dentry *anon) 1789 { 1790 struct dentry *dparent, *aparent; 1791 1792 switch_names(dentry, anon); 1793 swap(dentry->d_name.hash, anon->d_name.hash); 1794 1795 dparent = dentry->d_parent; 1796 aparent = anon->d_parent; 1797 1798 dentry->d_parent = (aparent == anon) ? dentry : aparent; 1799 list_del(&dentry->d_u.d_child); 1800 if (!IS_ROOT(dentry)) 1801 list_add(&dentry->d_u.d_child, &dentry->d_parent->d_subdirs); 1802 else 1803 INIT_LIST_HEAD(&dentry->d_u.d_child); 1804 1805 anon->d_parent = (dparent == dentry) ? anon : dparent; 1806 list_del(&anon->d_u.d_child); 1807 if (!IS_ROOT(anon)) 1808 list_add(&anon->d_u.d_child, &anon->d_parent->d_subdirs); 1809 else 1810 INIT_LIST_HEAD(&anon->d_u.d_child); 1811 1812 anon->d_flags &= ~DCACHE_DISCONNECTED; 1813 } 1814 1815 /** 1816 * d_materialise_unique - introduce an inode into the tree 1817 * @dentry: candidate dentry 1818 * @inode: inode to bind to the dentry, to which aliases may be attached 1819 * 1820 * Introduces an dentry into the tree, substituting an extant disconnected 1821 * root directory alias in its place if there is one 1822 */ 1823 struct dentry *d_materialise_unique(struct dentry *dentry, struct inode *inode) 1824 { 1825 struct dentry *actual; 1826 1827 BUG_ON(!d_unhashed(dentry)); 1828 1829 spin_lock(&dcache_lock); 1830 1831 if (!inode) { 1832 actual = dentry; 1833 __d_instantiate(dentry, NULL); 1834 goto found_lock; 1835 } 1836 1837 if (S_ISDIR(inode->i_mode)) { 1838 struct dentry *alias; 1839 1840 /* Does an aliased dentry already exist? */ 1841 alias = __d_find_alias(inode, 0); 1842 if (alias) { 1843 actual = alias; 1844 /* Is this an anonymous mountpoint that we could splice 1845 * into our tree? */ 1846 if (IS_ROOT(alias)) { 1847 spin_lock(&alias->d_lock); 1848 __d_materialise_dentry(dentry, alias); 1849 __d_drop(alias); 1850 goto found; 1851 } 1852 /* Nope, but we must(!) avoid directory aliasing */ 1853 actual = __d_unalias(dentry, alias); 1854 if (IS_ERR(actual)) 1855 dput(alias); 1856 goto out_nolock; 1857 } 1858 } 1859 1860 /* Add a unique reference */ 1861 actual = __d_instantiate_unique(dentry, inode); 1862 if (!actual) 1863 actual = dentry; 1864 else if (unlikely(!d_unhashed(actual))) 1865 goto shouldnt_be_hashed; 1866 1867 found_lock: 1868 spin_lock(&actual->d_lock); 1869 found: 1870 _d_rehash(actual); 1871 spin_unlock(&actual->d_lock); 1872 spin_unlock(&dcache_lock); 1873 out_nolock: 1874 if (actual == dentry) { 1875 security_d_instantiate(dentry, inode); 1876 return NULL; 1877 } 1878 1879 iput(inode); 1880 return actual; 1881 1882 shouldnt_be_hashed: 1883 spin_unlock(&dcache_lock); 1884 BUG(); 1885 } 1886 EXPORT_SYMBOL_GPL(d_materialise_unique); 1887 1888 static int prepend(char **buffer, int *buflen, const char *str, int namelen) 1889 { 1890 *buflen -= namelen; 1891 if (*buflen < 0) 1892 return -ENAMETOOLONG; 1893 *buffer -= namelen; 1894 memcpy(*buffer, str, namelen); 1895 return 0; 1896 } 1897 1898 static int prepend_name(char **buffer, int *buflen, struct qstr *name) 1899 { 1900 return prepend(buffer, buflen, name->name, name->len); 1901 } 1902 1903 /** 1904 * __d_path - return the path of a dentry 1905 * @path: the dentry/vfsmount to report 1906 * @root: root vfsmnt/dentry (may be modified by this function) 1907 * @buffer: buffer to return value in 1908 * @buflen: buffer length 1909 * 1910 * Convert a dentry into an ASCII path name. If the entry has been deleted 1911 * the string " (deleted)" is appended. Note that this is ambiguous. 1912 * 1913 * Returns a pointer into the buffer or an error code if the 1914 * path was too long. 1915 * 1916 * "buflen" should be positive. Caller holds the dcache_lock. 1917 * 1918 * If path is not reachable from the supplied root, then the value of 1919 * root is changed (without modifying refcounts). 1920 */ 1921 char *__d_path(const struct path *path, struct path *root, 1922 char *buffer, int buflen) 1923 { 1924 struct dentry *dentry = path->dentry; 1925 struct vfsmount *vfsmnt = path->mnt; 1926 char *end = buffer + buflen; 1927 char *retval; 1928 1929 spin_lock(&vfsmount_lock); 1930 prepend(&end, &buflen, "\0", 1); 1931 if (d_unlinked(dentry) && 1932 (prepend(&end, &buflen, " (deleted)", 10) != 0)) 1933 goto Elong; 1934 1935 if (buflen < 1) 1936 goto Elong; 1937 /* Get '/' right */ 1938 retval = end-1; 1939 *retval = '/'; 1940 1941 for (;;) { 1942 struct dentry * parent; 1943 1944 if (dentry == root->dentry && vfsmnt == root->mnt) 1945 break; 1946 if (dentry == vfsmnt->mnt_root || IS_ROOT(dentry)) { 1947 /* Global root? */ 1948 if (vfsmnt->mnt_parent == vfsmnt) { 1949 goto global_root; 1950 } 1951 dentry = vfsmnt->mnt_mountpoint; 1952 vfsmnt = vfsmnt->mnt_parent; 1953 continue; 1954 } 1955 parent = dentry->d_parent; 1956 prefetch(parent); 1957 if ((prepend_name(&end, &buflen, &dentry->d_name) != 0) || 1958 (prepend(&end, &buflen, "/", 1) != 0)) 1959 goto Elong; 1960 retval = end; 1961 dentry = parent; 1962 } 1963 1964 out: 1965 spin_unlock(&vfsmount_lock); 1966 return retval; 1967 1968 global_root: 1969 retval += 1; /* hit the slash */ 1970 if (prepend_name(&retval, &buflen, &dentry->d_name) != 0) 1971 goto Elong; 1972 root->mnt = vfsmnt; 1973 root->dentry = dentry; 1974 goto out; 1975 1976 Elong: 1977 retval = ERR_PTR(-ENAMETOOLONG); 1978 goto out; 1979 } 1980 1981 /** 1982 * d_path - return the path of a dentry 1983 * @path: path to report 1984 * @buf: buffer to return value in 1985 * @buflen: buffer length 1986 * 1987 * Convert a dentry into an ASCII path name. If the entry has been deleted 1988 * the string " (deleted)" is appended. Note that this is ambiguous. 1989 * 1990 * Returns a pointer into the buffer or an error code if the path was 1991 * too long. Note: Callers should use the returned pointer, not the passed 1992 * in buffer, to use the name! The implementation often starts at an offset 1993 * into the buffer, and may leave 0 bytes at the start. 1994 * 1995 * "buflen" should be positive. 1996 */ 1997 char *d_path(const struct path *path, char *buf, int buflen) 1998 { 1999 char *res; 2000 struct path root; 2001 struct path tmp; 2002 2003 /* 2004 * We have various synthetic filesystems that never get mounted. On 2005 * these filesystems dentries are never used for lookup purposes, and 2006 * thus don't need to be hashed. They also don't need a name until a 2007 * user wants to identify the object in /proc/pid/fd/. The little hack 2008 * below allows us to generate a name for these objects on demand: 2009 */ 2010 if (path->dentry->d_op && path->dentry->d_op->d_dname) 2011 return path->dentry->d_op->d_dname(path->dentry, buf, buflen); 2012 2013 read_lock(¤t->fs->lock); 2014 root = current->fs->root; 2015 path_get(&root); 2016 read_unlock(¤t->fs->lock); 2017 spin_lock(&dcache_lock); 2018 tmp = root; 2019 res = __d_path(path, &tmp, buf, buflen); 2020 spin_unlock(&dcache_lock); 2021 path_put(&root); 2022 return res; 2023 } 2024 EXPORT_SYMBOL(d_path); 2025 2026 /* 2027 * Helper function for dentry_operations.d_dname() members 2028 */ 2029 char *dynamic_dname(struct dentry *dentry, char *buffer, int buflen, 2030 const char *fmt, ...) 2031 { 2032 va_list args; 2033 char temp[64]; 2034 int sz; 2035 2036 va_start(args, fmt); 2037 sz = vsnprintf(temp, sizeof(temp), fmt, args) + 1; 2038 va_end(args); 2039 2040 if (sz > sizeof(temp) || sz > buflen) 2041 return ERR_PTR(-ENAMETOOLONG); 2042 2043 buffer += buflen - sz; 2044 return memcpy(buffer, temp, sz); 2045 } 2046 2047 /* 2048 * Write full pathname from the root of the filesystem into the buffer. 2049 */ 2050 char *dentry_path(struct dentry *dentry, char *buf, int buflen) 2051 { 2052 char *end = buf + buflen; 2053 char *retval; 2054 2055 spin_lock(&dcache_lock); 2056 prepend(&end, &buflen, "\0", 1); 2057 if (d_unlinked(dentry) && 2058 (prepend(&end, &buflen, "//deleted", 9) != 0)) 2059 goto Elong; 2060 if (buflen < 1) 2061 goto Elong; 2062 /* Get '/' right */ 2063 retval = end-1; 2064 *retval = '/'; 2065 2066 while (!IS_ROOT(dentry)) { 2067 struct dentry *parent = dentry->d_parent; 2068 2069 prefetch(parent); 2070 if ((prepend_name(&end, &buflen, &dentry->d_name) != 0) || 2071 (prepend(&end, &buflen, "/", 1) != 0)) 2072 goto Elong; 2073 2074 retval = end; 2075 dentry = parent; 2076 } 2077 spin_unlock(&dcache_lock); 2078 return retval; 2079 Elong: 2080 spin_unlock(&dcache_lock); 2081 return ERR_PTR(-ENAMETOOLONG); 2082 } 2083 2084 /* 2085 * NOTE! The user-level library version returns a 2086 * character pointer. The kernel system call just 2087 * returns the length of the buffer filled (which 2088 * includes the ending '\0' character), or a negative 2089 * error value. So libc would do something like 2090 * 2091 * char *getcwd(char * buf, size_t size) 2092 * { 2093 * int retval; 2094 * 2095 * retval = sys_getcwd(buf, size); 2096 * if (retval >= 0) 2097 * return buf; 2098 * errno = -retval; 2099 * return NULL; 2100 * } 2101 */ 2102 SYSCALL_DEFINE2(getcwd, char __user *, buf, unsigned long, size) 2103 { 2104 int error; 2105 struct path pwd, root; 2106 char *page = (char *) __get_free_page(GFP_USER); 2107 2108 if (!page) 2109 return -ENOMEM; 2110 2111 read_lock(¤t->fs->lock); 2112 pwd = current->fs->pwd; 2113 path_get(&pwd); 2114 root = current->fs->root; 2115 path_get(&root); 2116 read_unlock(¤t->fs->lock); 2117 2118 error = -ENOENT; 2119 spin_lock(&dcache_lock); 2120 if (!d_unlinked(pwd.dentry)) { 2121 unsigned long len; 2122 struct path tmp = root; 2123 char * cwd; 2124 2125 cwd = __d_path(&pwd, &tmp, page, PAGE_SIZE); 2126 spin_unlock(&dcache_lock); 2127 2128 error = PTR_ERR(cwd); 2129 if (IS_ERR(cwd)) 2130 goto out; 2131 2132 error = -ERANGE; 2133 len = PAGE_SIZE + page - cwd; 2134 if (len <= size) { 2135 error = len; 2136 if (copy_to_user(buf, cwd, len)) 2137 error = -EFAULT; 2138 } 2139 } else 2140 spin_unlock(&dcache_lock); 2141 2142 out: 2143 path_put(&pwd); 2144 path_put(&root); 2145 free_page((unsigned long) page); 2146 return error; 2147 } 2148 2149 /* 2150 * Test whether new_dentry is a subdirectory of old_dentry. 2151 * 2152 * Trivially implemented using the dcache structure 2153 */ 2154 2155 /** 2156 * is_subdir - is new dentry a subdirectory of old_dentry 2157 * @new_dentry: new dentry 2158 * @old_dentry: old dentry 2159 * 2160 * Returns 1 if new_dentry is a subdirectory of the parent (at any depth). 2161 * Returns 0 otherwise. 2162 * Caller must ensure that "new_dentry" is pinned before calling is_subdir() 2163 */ 2164 2165 int is_subdir(struct dentry *new_dentry, struct dentry *old_dentry) 2166 { 2167 int result; 2168 unsigned long seq; 2169 2170 if (new_dentry == old_dentry) 2171 return 1; 2172 2173 /* 2174 * Need rcu_readlock to protect against the d_parent trashing 2175 * due to d_move 2176 */ 2177 rcu_read_lock(); 2178 do { 2179 /* for restarting inner loop in case of seq retry */ 2180 seq = read_seqbegin(&rename_lock); 2181 if (d_ancestor(old_dentry, new_dentry)) 2182 result = 1; 2183 else 2184 result = 0; 2185 } while (read_seqretry(&rename_lock, seq)); 2186 rcu_read_unlock(); 2187 2188 return result; 2189 } 2190 2191 int path_is_under(struct path *path1, struct path *path2) 2192 { 2193 struct vfsmount *mnt = path1->mnt; 2194 struct dentry *dentry = path1->dentry; 2195 int res; 2196 spin_lock(&vfsmount_lock); 2197 if (mnt != path2->mnt) { 2198 for (;;) { 2199 if (mnt->mnt_parent == mnt) { 2200 spin_unlock(&vfsmount_lock); 2201 return 0; 2202 } 2203 if (mnt->mnt_parent == path2->mnt) 2204 break; 2205 mnt = mnt->mnt_parent; 2206 } 2207 dentry = mnt->mnt_mountpoint; 2208 } 2209 res = is_subdir(dentry, path2->dentry); 2210 spin_unlock(&vfsmount_lock); 2211 return res; 2212 } 2213 EXPORT_SYMBOL(path_is_under); 2214 2215 void d_genocide(struct dentry *root) 2216 { 2217 struct dentry *this_parent = root; 2218 struct list_head *next; 2219 2220 spin_lock(&dcache_lock); 2221 repeat: 2222 next = this_parent->d_subdirs.next; 2223 resume: 2224 while (next != &this_parent->d_subdirs) { 2225 struct list_head *tmp = next; 2226 struct dentry *dentry = list_entry(tmp, struct dentry, d_u.d_child); 2227 next = tmp->next; 2228 if (d_unhashed(dentry)||!dentry->d_inode) 2229 continue; 2230 if (!list_empty(&dentry->d_subdirs)) { 2231 this_parent = dentry; 2232 goto repeat; 2233 } 2234 atomic_dec(&dentry->d_count); 2235 } 2236 if (this_parent != root) { 2237 next = this_parent->d_u.d_child.next; 2238 atomic_dec(&this_parent->d_count); 2239 this_parent = this_parent->d_parent; 2240 goto resume; 2241 } 2242 spin_unlock(&dcache_lock); 2243 } 2244 2245 /** 2246 * find_inode_number - check for dentry with name 2247 * @dir: directory to check 2248 * @name: Name to find. 2249 * 2250 * Check whether a dentry already exists for the given name, 2251 * and return the inode number if it has an inode. Otherwise 2252 * 0 is returned. 2253 * 2254 * This routine is used to post-process directory listings for 2255 * filesystems using synthetic inode numbers, and is necessary 2256 * to keep getcwd() working. 2257 */ 2258 2259 ino_t find_inode_number(struct dentry *dir, struct qstr *name) 2260 { 2261 struct dentry * dentry; 2262 ino_t ino = 0; 2263 2264 dentry = d_hash_and_lookup(dir, name); 2265 if (dentry) { 2266 if (dentry->d_inode) 2267 ino = dentry->d_inode->i_ino; 2268 dput(dentry); 2269 } 2270 return ino; 2271 } 2272 EXPORT_SYMBOL(find_inode_number); 2273 2274 static __initdata unsigned long dhash_entries; 2275 static int __init set_dhash_entries(char *str) 2276 { 2277 if (!str) 2278 return 0; 2279 dhash_entries = simple_strtoul(str, &str, 0); 2280 return 1; 2281 } 2282 __setup("dhash_entries=", set_dhash_entries); 2283 2284 static void __init dcache_init_early(void) 2285 { 2286 int loop; 2287 2288 /* If hashes are distributed across NUMA nodes, defer 2289 * hash allocation until vmalloc space is available. 2290 */ 2291 if (hashdist) 2292 return; 2293 2294 dentry_hashtable = 2295 alloc_large_system_hash("Dentry cache", 2296 sizeof(struct hlist_head), 2297 dhash_entries, 2298 13, 2299 HASH_EARLY, 2300 &d_hash_shift, 2301 &d_hash_mask, 2302 0); 2303 2304 for (loop = 0; loop < (1 << d_hash_shift); loop++) 2305 INIT_HLIST_HEAD(&dentry_hashtable[loop]); 2306 } 2307 2308 static void __init dcache_init(void) 2309 { 2310 int loop; 2311 2312 /* 2313 * A constructor could be added for stable state like the lists, 2314 * but it is probably not worth it because of the cache nature 2315 * of the dcache. 2316 */ 2317 dentry_cache = KMEM_CACHE(dentry, 2318 SLAB_RECLAIM_ACCOUNT|SLAB_PANIC|SLAB_MEM_SPREAD); 2319 2320 register_shrinker(&dcache_shrinker); 2321 2322 /* Hash may have been set up in dcache_init_early */ 2323 if (!hashdist) 2324 return; 2325 2326 dentry_hashtable = 2327 alloc_large_system_hash("Dentry cache", 2328 sizeof(struct hlist_head), 2329 dhash_entries, 2330 13, 2331 0, 2332 &d_hash_shift, 2333 &d_hash_mask, 2334 0); 2335 2336 for (loop = 0; loop < (1 << d_hash_shift); loop++) 2337 INIT_HLIST_HEAD(&dentry_hashtable[loop]); 2338 } 2339 2340 /* SLAB cache for __getname() consumers */ 2341 struct kmem_cache *names_cachep __read_mostly; 2342 EXPORT_SYMBOL(names_cachep); 2343 2344 EXPORT_SYMBOL(d_genocide); 2345 2346 void __init vfs_caches_init_early(void) 2347 { 2348 dcache_init_early(); 2349 inode_init_early(); 2350 } 2351 2352 void __init vfs_caches_init(unsigned long mempages) 2353 { 2354 unsigned long reserve; 2355 2356 /* Base hash sizes on available memory, with a reserve equal to 2357 150% of current kernel size */ 2358 2359 reserve = min((mempages - nr_free_pages()) * 3/2, mempages - 1); 2360 mempages -= reserve; 2361 2362 names_cachep = kmem_cache_create("names_cache", PATH_MAX, 0, 2363 SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL); 2364 2365 dcache_init(); 2366 inode_init(); 2367 files_init(mempages); 2368 mnt_init(); 2369 bdev_cache_init(); 2370 chrdev_init(); 2371 } 2372