dcache.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:32k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  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.  * Notes on the allocation strategy:
  10.  *
  11.  * The dcache is a master of the icache - whenever a dcache entry
  12.  * exists, the inode will always exist. "iput()" is done either when
  13.  * the dcache entry is deleted or garbage collected.
  14.  */
  15. #include <linux/config.h>
  16. #include <linux/string.h>
  17. #include <linux/mm.h>
  18. #include <linux/fs.h>
  19. #include <linux/slab.h>
  20. #include <linux/init.h>
  21. #include <linux/smp_lock.h>
  22. #include <linux/cache.h>
  23. #include <linux/module.h>
  24. #include <asm/uaccess.h>
  25. #define DCACHE_PARANOIA 1
  26. /* #define DCACHE_DEBUG 1 */
  27. spinlock_t dcache_lock __cacheline_aligned_in_smp = SPIN_LOCK_UNLOCKED;
  28. /* Right now the dcache depends on the kernel lock */
  29. #define check_lock() if (!kernel_locked()) BUG()
  30. static kmem_cache_t *dentry_cache; 
  31. /*
  32.  * This is the single most critical data structure when it comes
  33.  * to the dcache: the hashtable for lookups. Somebody should try
  34.  * to make this good - I've just made it work.
  35.  *
  36.  * This hash-function tries to avoid losing too many bits of hash
  37.  * information, yet avoid using a prime hash-size or similar.
  38.  */
  39. #define D_HASHBITS     d_hash_shift
  40. #define D_HASHMASK     d_hash_mask
  41. static unsigned int d_hash_mask;
  42. static unsigned int d_hash_shift;
  43. static struct list_head *dentry_hashtable;
  44. static LIST_HEAD(dentry_unused);
  45. /* Statistics gathering. */
  46. struct dentry_stat_t dentry_stat = {0, 0, 45, 0,};
  47. /* no dcache_lock, please */
  48. static inline void d_free(struct dentry *dentry)
  49. {
  50. if (dentry->d_op && dentry->d_op->d_release)
  51. dentry->d_op->d_release(dentry);
  52. if (dname_external(dentry)) 
  53. kfree(dentry->d_name.name);
  54. kmem_cache_free(dentry_cache, dentry); 
  55. dentry_stat.nr_dentry--;
  56. }
  57. /*
  58.  * Release the dentry's inode, using the filesystem
  59.  * d_iput() operation if defined.
  60.  * Called with dcache_lock held, drops it.
  61.  */
  62. static inline void dentry_iput(struct dentry * dentry)
  63. {
  64. struct inode *inode = dentry->d_inode;
  65. if (inode) {
  66. dentry->d_inode = NULL;
  67. list_del_init(&dentry->d_alias);
  68. spin_unlock(&dcache_lock);
  69. if (dentry->d_op && dentry->d_op->d_iput)
  70. dentry->d_op->d_iput(dentry, inode);
  71. else
  72. iput(inode);
  73. } else
  74. spin_unlock(&dcache_lock);
  75. }
  76. /* 
  77.  * This is dput
  78.  *
  79.  * This is complicated by the fact that we do not want to put
  80.  * dentries that are no longer on any hash chain on the unused
  81.  * list: we'd much rather just get rid of them immediately.
  82.  *
  83.  * However, that implies that we have to traverse the dentry
  84.  * tree upwards to the parents which might _also_ now be
  85.  * scheduled for deletion (it may have been only waiting for
  86.  * its last child to go away).
  87.  *
  88.  * This tail recursion is done by hand as we don't want to depend
  89.  * on the compiler to always get this right (gcc generally doesn't).
  90.  * Real recursion would eat up our stack space.
  91.  */
  92. /*
  93.  * dput - release a dentry
  94.  * @dentry: dentry to release 
  95.  *
  96.  * Release a dentry. This will drop the usage count and if appropriate
  97.  * call the dentry unlink method as well as removing it from the queues and
  98.  * releasing its resources. If the parent dentries were scheduled for release
  99.  * they too may now get deleted.
  100.  *
  101.  * no dcache lock, please.
  102.  */
  103. void dput(struct dentry *dentry)
  104. {
  105. if (!dentry)
  106. return;
  107. repeat:
  108. if (!atomic_dec_and_lock(&dentry->d_count, &dcache_lock))
  109. return;
  110. /* dput on a free dentry? */
  111. if (!list_empty(&dentry->d_lru))
  112. BUG();
  113. /*
  114.  * AV: ->d_delete() is _NOT_ allowed to block now.
  115.  */
  116. if (dentry->d_op && dentry->d_op->d_delete) {
  117. if (dentry->d_op->d_delete(dentry))
  118. goto unhash_it;
  119. }
  120. /* Unreachable? Get rid of it */
  121. if (list_empty(&dentry->d_hash))
  122. goto kill_it;
  123. list_add(&dentry->d_lru, &dentry_unused);
  124. dentry_stat.nr_unused++;
  125. spin_unlock(&dcache_lock);
  126. return;
  127. unhash_it:
  128. list_del_init(&dentry->d_hash);
  129. kill_it: {
  130. struct dentry *parent;
  131. list_del(&dentry->d_child);
  132. /* drops the lock, at that point nobody can reach this dentry */
  133. dentry_iput(dentry);
  134. parent = dentry->d_parent;
  135. d_free(dentry);
  136. if (dentry == parent)
  137. return;
  138. dentry = parent;
  139. goto repeat;
  140. }
  141. }
  142. /**
  143.  * d_invalidate - invalidate a dentry
  144.  * @dentry: dentry to invalidate
  145.  *
  146.  * Try to invalidate the dentry if it turns out to be
  147.  * possible. If there are other dentries that can be
  148.  * reached through this one we can't delete it and we
  149.  * return -EBUSY. On success we return 0.
  150.  *
  151.  * no dcache lock.
  152.  */
  153.  
  154. int d_invalidate(struct dentry * dentry)
  155. {
  156. /*
  157.  * If it's already been dropped, return OK.
  158.  */
  159. spin_lock(&dcache_lock);
  160. if (list_empty(&dentry->d_hash)) {
  161. spin_unlock(&dcache_lock);
  162. return 0;
  163. }
  164. /*
  165.  * Check whether to do a partial shrink_dcache
  166.  * to get rid of unused child entries.
  167.  */
  168. if (!list_empty(&dentry->d_subdirs)) {
  169. spin_unlock(&dcache_lock);
  170. shrink_dcache_parent(dentry);
  171. spin_lock(&dcache_lock);
  172. }
  173. /*
  174.  * Somebody else still using it?
  175.  *
  176.  * If it's a directory, we can't drop it
  177.  * for fear of somebody re-populating it
  178.  * with children (even though dropping it
  179.  * would make it unreachable from the root,
  180.  * we might still populate it if it was a
  181.  * working directory or similar).
  182.  */
  183. if (atomic_read(&dentry->d_count) > 1) {
  184. if (dentry->d_inode && S_ISDIR(dentry->d_inode->i_mode)) {
  185. spin_unlock(&dcache_lock);
  186. return -EBUSY;
  187. }
  188. }
  189. list_del_init(&dentry->d_hash);
  190. spin_unlock(&dcache_lock);
  191. return 0;
  192. }
  193. /* This should be called _only_ with dcache_lock held */
  194. static inline struct dentry * __dget_locked(struct dentry *dentry)
  195. {
  196. atomic_inc(&dentry->d_count);
  197. if (atomic_read(&dentry->d_count) == 1) {
  198. dentry_stat.nr_unused--;
  199. list_del_init(&dentry->d_lru);
  200. }
  201. return dentry;
  202. }
  203. struct dentry * dget_locked(struct dentry *dentry)
  204. {
  205. return __dget_locked(dentry);
  206. }
  207. /**
  208.  * d_find_alias - grab a hashed alias of inode
  209.  * @inode: inode in question
  210.  *
  211.  * If inode has a hashed alias - acquire the reference to alias and
  212.  * return it. Otherwise return NULL. Notice that if inode is a directory
  213.  * there can be only one alias and it can be unhashed only if it has
  214.  * no children.
  215.  */
  216. struct dentry * d_find_alias(struct inode *inode)
  217. {
  218. struct list_head *head, *next, *tmp;
  219. struct dentry *alias;
  220. spin_lock(&dcache_lock);
  221. head = &inode->i_dentry;
  222. next = inode->i_dentry.next;
  223. while (next != head) {
  224. tmp = next;
  225. next = tmp->next;
  226. alias = list_entry(tmp, struct dentry, d_alias);
  227. if (!list_empty(&alias->d_hash)) {
  228. __dget_locked(alias);
  229. spin_unlock(&dcache_lock);
  230. return alias;
  231. }
  232. }
  233. spin_unlock(&dcache_lock);
  234. return NULL;
  235. }
  236. /*
  237.  * Try to kill dentries associated with this inode.
  238.  * WARNING: you must own a reference to inode.
  239.  */
  240. void d_prune_aliases(struct inode *inode)
  241. {
  242. struct list_head *tmp, *head = &inode->i_dentry;
  243. restart:
  244. spin_lock(&dcache_lock);
  245. tmp = head;
  246. while ((tmp = tmp->next) != head) {
  247. struct dentry *dentry = list_entry(tmp, struct dentry, d_alias);
  248. if (!atomic_read(&dentry->d_count)) {
  249. __dget_locked(dentry);
  250. spin_unlock(&dcache_lock);
  251. d_drop(dentry);
  252. dput(dentry);
  253. goto restart;
  254. }
  255. }
  256. spin_unlock(&dcache_lock);
  257. }
  258. /*
  259.  * Throw away a dentry - free the inode, dput the parent.
  260.  * This requires that the LRU list has already been
  261.  * removed.
  262.  * Called with dcache_lock, drops it and then regains.
  263.  */
  264. static inline void prune_one_dentry(struct dentry * dentry)
  265. {
  266. struct dentry * parent;
  267. list_del_init(&dentry->d_hash);
  268. list_del(&dentry->d_child);
  269. dentry_iput(dentry);
  270. parent = dentry->d_parent;
  271. d_free(dentry);
  272. if (parent != dentry)
  273. dput(parent);
  274. spin_lock(&dcache_lock);
  275. }
  276. /**
  277.  * prune_dcache - shrink the dcache
  278.  * @count: number of entries to try and free
  279.  *
  280.  * Shrink the dcache. This is done when we need
  281.  * more memory, or simply when we need to unmount
  282.  * something (at which point we need to unuse
  283.  * all dentries).
  284.  *
  285.  * This function may fail to free any resources if
  286.  * all the dentries are in use.
  287.  */
  288.  
  289. void prune_dcache(int count)
  290. {
  291. spin_lock(&dcache_lock);
  292. for (;;) {
  293. struct dentry *dentry;
  294. struct list_head *tmp;
  295. tmp = dentry_unused.prev;
  296. if (tmp == &dentry_unused)
  297. break;
  298. list_del_init(tmp);
  299. dentry = list_entry(tmp, struct dentry, d_lru);
  300. /* If the dentry was recently referenced, don't free it. */
  301. if (dentry->d_vfs_flags & DCACHE_REFERENCED) {
  302. dentry->d_vfs_flags &= ~DCACHE_REFERENCED;
  303. list_add(&dentry->d_lru, &dentry_unused);
  304. continue;
  305. }
  306. dentry_stat.nr_unused--;
  307. /* Unused dentry with a count? */
  308. if (atomic_read(&dentry->d_count))
  309. BUG();
  310. prune_one_dentry(dentry);
  311. if (!--count)
  312. break;
  313. }
  314. spin_unlock(&dcache_lock);
  315. }
  316. /*
  317.  * Shrink the dcache for the specified super block.
  318.  * This allows us to unmount a device without disturbing
  319.  * the dcache for the other devices.
  320.  *
  321.  * This implementation makes just two traversals of the
  322.  * unused list.  On the first pass we move the selected
  323.  * dentries to the most recent end, and on the second
  324.  * pass we free them.  The second pass must restart after
  325.  * each dput(), but since the target dentries are all at
  326.  * the end, it's really just a single traversal.
  327.  */
  328. /**
  329.  * shrink_dcache_sb - shrink dcache for a superblock
  330.  * @sb: superblock
  331.  *
  332.  * Shrink the dcache for the specified super block. This
  333.  * is used to free the dcache before unmounting a file
  334.  * system
  335.  */
  336. void shrink_dcache_sb(struct super_block * sb)
  337. {
  338. struct list_head *tmp, *next;
  339. struct dentry *dentry;
  340. /*
  341.  * Pass one ... move the dentries for the specified
  342.  * superblock to the most recent end of the unused list.
  343.  */
  344. spin_lock(&dcache_lock);
  345. next = dentry_unused.next;
  346. while (next != &dentry_unused) {
  347. tmp = next;
  348. next = tmp->next;
  349. dentry = list_entry(tmp, struct dentry, d_lru);
  350. if (dentry->d_sb != sb)
  351. continue;
  352. list_del(tmp);
  353. list_add(tmp, &dentry_unused);
  354. }
  355. /*
  356.  * Pass two ... free the dentries for this superblock.
  357.  */
  358. repeat:
  359. next = dentry_unused.next;
  360. while (next != &dentry_unused) {
  361. tmp = next;
  362. next = tmp->next;
  363. dentry = list_entry(tmp, struct dentry, d_lru);
  364. if (dentry->d_sb != sb)
  365. continue;
  366. if (atomic_read(&dentry->d_count))
  367. continue;
  368. dentry_stat.nr_unused--;
  369. list_del_init(tmp);
  370. prune_one_dentry(dentry);
  371. goto repeat;
  372. }
  373. spin_unlock(&dcache_lock);
  374. }
  375. /*
  376.  * Search for at least 1 mount point in the dentry's subdirs.
  377.  * We descend to the next level whenever the d_subdirs
  378.  * list is non-empty and continue searching.
  379.  */
  380.  
  381. /**
  382.  * have_submounts - check for mounts over a dentry
  383.  * @parent: dentry to check.
  384.  *
  385.  * Return true if the parent or its subdirectories contain
  386.  * a mount point
  387.  */
  388.  
  389. int have_submounts(struct dentry *parent)
  390. {
  391. struct dentry *this_parent = parent;
  392. struct list_head *next;
  393. spin_lock(&dcache_lock);
  394. if (d_mountpoint(parent))
  395. goto positive;
  396. repeat:
  397. next = this_parent->d_subdirs.next;
  398. resume:
  399. while (next != &this_parent->d_subdirs) {
  400. struct list_head *tmp = next;
  401. struct dentry *dentry = list_entry(tmp, struct dentry, d_child);
  402. next = tmp->next;
  403. /* Have we found a mount point ? */
  404. if (d_mountpoint(dentry))
  405. goto positive;
  406. if (!list_empty(&dentry->d_subdirs)) {
  407. this_parent = dentry;
  408. goto repeat;
  409. }
  410. }
  411. /*
  412.  * All done at this level ... ascend and resume the search.
  413.  */
  414. if (this_parent != parent) {
  415. next = this_parent->d_child.next; 
  416. this_parent = this_parent->d_parent;
  417. goto resume;
  418. }
  419. spin_unlock(&dcache_lock);
  420. return 0; /* No mount points found in tree */
  421. positive:
  422. spin_unlock(&dcache_lock);
  423. return 1;
  424. }
  425. /*
  426.  * Search the dentry child list for the specified parent,
  427.  * and move any unused dentries to the end of the unused
  428.  * list for prune_dcache(). We descend to the next level
  429.  * whenever the d_subdirs list is non-empty and continue
  430.  * searching.
  431.  */
  432. static int select_parent(struct dentry * parent)
  433. {
  434. struct dentry *this_parent = parent;
  435. struct list_head *next;
  436. int found = 0;
  437. spin_lock(&dcache_lock);
  438. repeat:
  439. next = this_parent->d_subdirs.next;
  440. resume:
  441. while (next != &this_parent->d_subdirs) {
  442. struct list_head *tmp = next;
  443. struct dentry *dentry = list_entry(tmp, struct dentry, d_child);
  444. next = tmp->next;
  445. if (!atomic_read(&dentry->d_count)) {
  446. list_del(&dentry->d_lru);
  447. list_add(&dentry->d_lru, dentry_unused.prev);
  448. found++;
  449. }
  450. /*
  451.  * Descend a level if the d_subdirs list is non-empty.
  452.  */
  453. if (!list_empty(&dentry->d_subdirs)) {
  454. this_parent = dentry;
  455. #ifdef DCACHE_DEBUG
  456. printk(KERN_DEBUG "select_parent: descending to %s/%s, found=%dn",
  457. dentry->d_parent->d_name.name, dentry->d_name.name, found);
  458. #endif
  459. goto repeat;
  460. }
  461. }
  462. /*
  463.  * All done at this level ... ascend and resume the search.
  464.  */
  465. if (this_parent != parent) {
  466. next = this_parent->d_child.next; 
  467. this_parent = this_parent->d_parent;
  468. #ifdef DCACHE_DEBUG
  469. printk(KERN_DEBUG "select_parent: ascending to %s/%s, found=%dn",
  470. this_parent->d_parent->d_name.name, this_parent->d_name.name, found);
  471. #endif
  472. goto resume;
  473. }
  474. spin_unlock(&dcache_lock);
  475. return found;
  476. }
  477. /**
  478.  * shrink_dcache_parent - prune dcache
  479.  * @parent: parent of entries to prune
  480.  *
  481.  * Prune the dcache to remove unused children of the parent dentry.
  482.  */
  483.  
  484. void shrink_dcache_parent(struct dentry * parent)
  485. {
  486. int found;
  487. while ((found = select_parent(parent)) != 0)
  488. prune_dcache(found);
  489. }
  490. /*
  491.  * This is called from kswapd when we think we need some
  492.  * more memory, but aren't really sure how much. So we
  493.  * carefully try to free a _bit_ of our dcache, but not
  494.  * too much.
  495.  *
  496.  * Priority:
  497.  *   0 - very urgent: shrink everything
  498.  *  ...
  499.  *   6 - base-level: try to shrink a bit.
  500.  */
  501. int shrink_dcache_memory(int priority, unsigned int gfp_mask)
  502. {
  503. int count = 0;
  504. /*
  505.  * Nasty deadlock avoidance.
  506.  *
  507.  * ext2_new_block->getblk->GFP->shrink_dcache_memory->prune_dcache->
  508.  * prune_one_dentry->dput->dentry_iput->iput->inode->i_sb->s_op->
  509.  * put_inode->ext2_discard_prealloc->ext2_free_blocks->lock_super->
  510.  * DEADLOCK.
  511.  *
  512.  * We should make sure we don't hold the superblock lock over
  513.  * block allocations, but for now:
  514.  */
  515. if (!(gfp_mask & __GFP_FS))
  516. return 0;
  517. count = dentry_stat.nr_unused / priority;
  518. prune_dcache(count);
  519. return kmem_cache_shrink(dentry_cache);
  520. }
  521. #define NAME_ALLOC_LEN(len) ((len+16) & ~15)
  522. /**
  523.  * d_alloc - allocate a dcache entry
  524.  * @parent: parent of entry to allocate
  525.  * @name: qstr of the name
  526.  *
  527.  * Allocates a dentry. It returns %NULL if there is insufficient memory
  528.  * available. On a success the dentry is returned. The name passed in is
  529.  * copied and the copy passed in may be reused after this call.
  530.  */
  531.  
  532. struct dentry * d_alloc(struct dentry * parent, const struct qstr *name)
  533. {
  534. char * str;
  535. struct dentry *dentry;
  536. dentry = kmem_cache_alloc(dentry_cache, GFP_KERNEL); 
  537. if (!dentry)
  538. return NULL;
  539. if (name->len > DNAME_INLINE_LEN-1) {
  540. str = kmalloc(NAME_ALLOC_LEN(name->len), GFP_KERNEL);
  541. if (!str) {
  542. kmem_cache_free(dentry_cache, dentry); 
  543. return NULL;
  544. }
  545. } else
  546. str = dentry->d_iname; 
  547. memcpy(str, name->name, name->len);
  548. str[name->len] = 0;
  549. atomic_set(&dentry->d_count, 1);
  550. dentry->d_vfs_flags = 0;
  551. dentry->d_flags = 0;
  552. dentry->d_inode = NULL;
  553. dentry->d_parent = NULL;
  554. dentry->d_sb = NULL;
  555. dentry->d_name.name = str;
  556. dentry->d_name.len = name->len;
  557. dentry->d_name.hash = name->hash;
  558. dentry->d_op = NULL;
  559. dentry->d_fsdata = NULL;
  560. dentry->d_mounted = 0;
  561. INIT_LIST_HEAD(&dentry->d_hash);
  562. INIT_LIST_HEAD(&dentry->d_lru);
  563. INIT_LIST_HEAD(&dentry->d_subdirs);
  564. INIT_LIST_HEAD(&dentry->d_alias);
  565. if (parent) {
  566. dentry->d_parent = dget(parent);
  567. dentry->d_sb = parent->d_sb;
  568. spin_lock(&dcache_lock);
  569. list_add(&dentry->d_child, &parent->d_subdirs);
  570. spin_unlock(&dcache_lock);
  571. } else
  572. INIT_LIST_HEAD(&dentry->d_child);
  573. dentry_stat.nr_dentry++;
  574. return dentry;
  575. }
  576. /**
  577.  * d_instantiate - fill in inode information for a dentry
  578.  * @entry: dentry to complete
  579.  * @inode: inode to attach to this dentry
  580.  *
  581.  * Fill in inode information in the entry.
  582.  *
  583.  * This turns negative dentries into productive full members
  584.  * of society.
  585.  *
  586.  * NOTE! This assumes that the inode count has been incremented
  587.  * (or otherwise set) by the caller to indicate that it is now
  588.  * in use by the dcache.
  589.  */
  590.  
  591. void d_instantiate(struct dentry *entry, struct inode * inode)
  592. {
  593. if (!list_empty(&entry->d_alias)) BUG();
  594. spin_lock(&dcache_lock);
  595. if (inode)
  596. list_add(&entry->d_alias, &inode->i_dentry);
  597. entry->d_inode = inode;
  598. spin_unlock(&dcache_lock);
  599. }
  600. /**
  601.  * d_alloc_root - allocate root dentry
  602.  * @root_inode: inode to allocate the root for
  603.  *
  604.  * Allocate a root ("/") dentry for the inode given. The inode is
  605.  * instantiated and returned. %NULL is returned if there is insufficient
  606.  * memory or the inode passed is %NULL.
  607.  */
  608.  
  609. struct dentry * d_alloc_root(struct inode * root_inode)
  610. {
  611. struct dentry *res = NULL;
  612. if (root_inode) {
  613. res = d_alloc(NULL, &(const struct qstr) { "/", 1, 0 });
  614. if (res) {
  615. res->d_sb = root_inode->i_sb;
  616. res->d_parent = res;
  617. d_instantiate(res, root_inode);
  618. }
  619. }
  620. return res;
  621. }
  622. static inline struct list_head * d_hash(struct dentry * parent, unsigned long hash)
  623. {
  624. hash += (unsigned long) parent / L1_CACHE_BYTES;
  625. hash = hash ^ (hash >> D_HASHBITS);
  626. return dentry_hashtable + (hash & D_HASHMASK);
  627. }
  628. /**
  629.  * d_lookup - search for a dentry
  630.  * @parent: parent dentry
  631.  * @name: qstr of name we wish to find
  632.  *
  633.  * Searches the children of the parent dentry for the name in question. If
  634.  * the dentry is found its reference count is incremented and the dentry
  635.  * is returned. The caller must use d_put to free the entry when it has
  636.  * finished using it. %NULL is returned on failure.
  637.  */
  638.  
  639. struct dentry * d_lookup(struct dentry * parent, struct qstr * name)
  640. {
  641. unsigned int len = name->len;
  642. unsigned int hash = name->hash;
  643. const unsigned char *str = name->name;
  644. struct list_head *head = d_hash(parent,hash);
  645. struct list_head *tmp;
  646. spin_lock(&dcache_lock);
  647. tmp = head->next;
  648. for (;;) {
  649. struct dentry * dentry = list_entry(tmp, struct dentry, d_hash);
  650. if (tmp == head)
  651. break;
  652. tmp = tmp->next;
  653. if (dentry->d_name.hash != hash)
  654. continue;
  655. if (dentry->d_parent != parent)
  656. continue;
  657. if (parent->d_op && parent->d_op->d_compare) {
  658. if (parent->d_op->d_compare(parent, &dentry->d_name, name))
  659. continue;
  660. } else {
  661. if (dentry->d_name.len != len)
  662. continue;
  663. if (memcmp(dentry->d_name.name, str, len))
  664. continue;
  665. }
  666. __dget_locked(dentry);
  667. dentry->d_vfs_flags |= DCACHE_REFERENCED;
  668. spin_unlock(&dcache_lock);
  669. return dentry;
  670. }
  671. spin_unlock(&dcache_lock);
  672. return NULL;
  673. }
  674. /**
  675.  * d_validate - verify dentry provided from insecure source
  676.  * @dentry: The dentry alleged to be valid child of @dparent
  677.  * @dparent: The parent dentry (known to be valid)
  678.  * @hash: Hash of the dentry
  679.  * @len: Length of the name
  680.  *
  681.  * An insecure source has sent us a dentry, here we verify it and dget() it.
  682.  * This is used by ncpfs in its readdir implementation.
  683.  * Zero is returned in the dentry is invalid.
  684.  */
  685.  
  686. int d_validate(struct dentry *dentry, struct dentry *dparent)
  687. {
  688. unsigned long dent_addr = (unsigned long) dentry;
  689. unsigned long min_addr = PAGE_OFFSET;
  690. unsigned long align_mask = 0x0F;
  691. struct list_head *base, *lhp;
  692. if (dent_addr < min_addr)
  693. goto out;
  694. if (dent_addr > (unsigned long)high_memory - sizeof(struct dentry))
  695. goto out;
  696. if (dent_addr & align_mask)
  697. goto out;
  698. if ((!kern_addr_valid(dent_addr)) || (!kern_addr_valid(dent_addr -1 +
  699. sizeof(struct dentry))))
  700. goto out;
  701. if (dentry->d_parent != dparent)
  702. goto out;
  703. spin_lock(&dcache_lock);
  704. lhp = base = d_hash(dparent, dentry->d_name.hash);
  705. while ((lhp = lhp->next) != base) {
  706. if (dentry == list_entry(lhp, struct dentry, d_hash)) {
  707. __dget_locked(dentry);
  708. spin_unlock(&dcache_lock);
  709. return 1;
  710. }
  711. }
  712. spin_unlock(&dcache_lock);
  713. out:
  714. return 0;
  715. }
  716. /*
  717.  * When a file is deleted, we have two options:
  718.  * - turn this dentry into a negative dentry
  719.  * - unhash this dentry and free it.
  720.  *
  721.  * Usually, we want to just turn this into
  722.  * a negative dentry, but if anybody else is
  723.  * currently using the dentry or the inode
  724.  * we can't do that and we fall back on removing
  725.  * it from the hash queues and waiting for
  726.  * it to be deleted later when it has no users
  727.  */
  728.  
  729. /**
  730.  * d_delete - delete a dentry
  731.  * @dentry: The dentry to delete
  732.  *
  733.  * Turn the dentry into a negative dentry if possible, otherwise
  734.  * remove it from the hash queues so it can be deleted later
  735.  */
  736.  
  737. void d_delete(struct dentry * dentry)
  738. {
  739. /*
  740.  * Are we the only user?
  741.  */
  742. spin_lock(&dcache_lock);
  743. if (atomic_read(&dentry->d_count) == 1) {
  744. dentry_iput(dentry);
  745. return;
  746. }
  747. spin_unlock(&dcache_lock);
  748. /*
  749.  * If not, just drop the dentry and let dput
  750.  * pick up the tab..
  751.  */
  752. d_drop(dentry);
  753. }
  754. /**
  755.  * d_rehash - add an entry back to the hash
  756.  * @entry: dentry to add to the hash
  757.  *
  758.  * Adds a dentry to the hash according to its name.
  759.  */
  760.  
  761. void d_rehash(struct dentry * entry)
  762. {
  763. struct list_head *list = d_hash(entry->d_parent, entry->d_name.hash);
  764. if (!list_empty(&entry->d_hash)) BUG();
  765. spin_lock(&dcache_lock);
  766. list_add(&entry->d_hash, list);
  767. spin_unlock(&dcache_lock);
  768. }
  769. #define do_switch(x,y) do { 
  770. __typeof__ (x) __tmp = x; 
  771. x = y; y = __tmp; } while (0)
  772. /*
  773.  * When switching names, the actual string doesn't strictly have to
  774.  * be preserved in the target - because we're dropping the target
  775.  * anyway. As such, we can just do a simple memcpy() to copy over
  776.  * the new name before we switch.
  777.  *
  778.  * Note that we have to be a lot more careful about getting the hash
  779.  * switched - we have to switch the hash value properly even if it
  780.  * then no longer matches the actual (corrupted) string of the target.
  781.  * The hash value has to match the hash queue that the dentry is on..
  782.  */
  783. static inline void switch_names(struct dentry * dentry, struct dentry * target)
  784. {
  785. const unsigned char *old_name, *new_name;
  786. check_lock();
  787. memcpy(dentry->d_iname, target->d_iname, DNAME_INLINE_LEN); 
  788. old_name = target->d_name.name;
  789. new_name = dentry->d_name.name;
  790. if (old_name == target->d_iname)
  791. old_name = dentry->d_iname;
  792. if (new_name == dentry->d_iname)
  793. new_name = target->d_iname;
  794. target->d_name.name = new_name;
  795. dentry->d_name.name = old_name;
  796. }
  797. /*
  798.  * We cannibalize "target" when moving dentry on top of it,
  799.  * because it's going to be thrown away anyway. We could be more
  800.  * polite about it, though.
  801.  *
  802.  * This forceful removal will result in ugly /proc output if
  803.  * somebody holds a file open that got deleted due to a rename.
  804.  * We could be nicer about the deleted file, and let it show
  805.  * up under the name it got deleted rather than the name that
  806.  * deleted it.
  807.  *
  808.  * Careful with the hash switch. The hash switch depends on
  809.  * the fact that any list-entry can be a head of the list.
  810.  * Think about it.
  811.  */
  812.  
  813. /**
  814.  * d_move - move a dentry
  815.  * @dentry: entry to move
  816.  * @target: new dentry
  817.  *
  818.  * Update the dcache to reflect the move of a file name. Negative
  819.  * dcache entries should not be moved in this way.
  820.  */
  821.   
  822. void d_move(struct dentry * dentry, struct dentry * target)
  823. {
  824. check_lock();
  825. if (!dentry->d_inode)
  826. printk(KERN_WARNING "VFS: moving negative dcache entryn");
  827. spin_lock(&dcache_lock);
  828. /* Move the dentry to the target hash queue */
  829. list_del(&dentry->d_hash);
  830. list_add(&dentry->d_hash, &target->d_hash);
  831. /* Unhash the target: dput() will then get rid of it */
  832. list_del_init(&target->d_hash);
  833. list_del(&dentry->d_child);
  834. list_del(&target->d_child);
  835. /* Switch the parents and the names.. */
  836. switch_names(dentry, target);
  837. do_switch(dentry->d_parent, target->d_parent);
  838. do_switch(dentry->d_name.len, target->d_name.len);
  839. do_switch(dentry->d_name.hash, target->d_name.hash);
  840. /* And add them back to the (new) parent lists */
  841. list_add(&target->d_child, &target->d_parent->d_subdirs);
  842. list_add(&dentry->d_child, &dentry->d_parent->d_subdirs);
  843. spin_unlock(&dcache_lock);
  844. }
  845. /**
  846.  * d_path - return the path of a dentry
  847.  * @dentry: dentry to report
  848.  * @vfsmnt: vfsmnt to which the dentry belongs
  849.  * @root: root dentry
  850.  * @rootmnt: vfsmnt to which the root dentry belongs
  851.  * @buffer: buffer to return value in
  852.  * @buflen: buffer length
  853.  *
  854.  * Convert a dentry into an ASCII path name. If the entry has been deleted
  855.  * the string " (deleted)" is appended. Note that this is ambiguous. Returns
  856.  * the buffer.
  857.  *
  858.  * "buflen" should be %PAGE_SIZE or more. Caller holds the dcache_lock.
  859.  */
  860. char * __d_path(struct dentry *dentry, struct vfsmount *vfsmnt,
  861. struct dentry *root, struct vfsmount *rootmnt,
  862. char *buffer, int buflen)
  863. {
  864. char * end = buffer+buflen;
  865. char * retval;
  866. int namelen;
  867. *--end = '';
  868. buflen--;
  869. if (!IS_ROOT(dentry) && list_empty(&dentry->d_hash)) {
  870. buflen -= 10;
  871. end -= 10;
  872. memcpy(end, " (deleted)", 10);
  873. }
  874. /* Get '/' right */
  875. retval = end-1;
  876. *retval = '/';
  877. for (;;) {
  878. struct dentry * parent;
  879. if (dentry == root && vfsmnt == rootmnt)
  880. break;
  881. if (dentry == vfsmnt->mnt_root || IS_ROOT(dentry)) {
  882. /* Global root? */
  883. if (vfsmnt->mnt_parent == vfsmnt)
  884. goto global_root;
  885. dentry = vfsmnt->mnt_mountpoint;
  886. vfsmnt = vfsmnt->mnt_parent;
  887. continue;
  888. }
  889. parent = dentry->d_parent;
  890. namelen = dentry->d_name.len;
  891. buflen -= namelen + 1;
  892. if (buflen < 0)
  893. break;
  894. end -= namelen;
  895. memcpy(end, dentry->d_name.name, namelen);
  896. *--end = '/';
  897. retval = end;
  898. dentry = parent;
  899. }
  900. return retval;
  901. global_root:
  902. namelen = dentry->d_name.len;
  903. buflen -= namelen;
  904. if (buflen >= 0) {
  905. retval -= namelen-1; /* hit the slash */
  906. memcpy(retval, dentry->d_name.name, namelen);
  907. }
  908. return retval;
  909. }
  910. /*
  911.  * NOTE! The user-level library version returns a
  912.  * character pointer. The kernel system call just
  913.  * returns the length of the buffer filled (which
  914.  * includes the ending '' character), or a negative
  915.  * error value. So libc would do something like
  916.  *
  917.  * char *getcwd(char * buf, size_t size)
  918.  * {
  919.  * int retval;
  920.  *
  921.  * retval = sys_getcwd(buf, size);
  922.  * if (retval >= 0)
  923.  * return buf;
  924.  * errno = -retval;
  925.  * return NULL;
  926.  * }
  927.  */
  928. asmlinkage long sys_getcwd(char *buf, unsigned long size)
  929. {
  930. int error;
  931. struct vfsmount *pwdmnt, *rootmnt;
  932. struct dentry *pwd, *root;
  933. char *page = (char *) __get_free_page(GFP_USER);
  934. if (!page)
  935. return -ENOMEM;
  936. read_lock(&current->fs->lock);
  937. pwdmnt = mntget(current->fs->pwdmnt);
  938. pwd = dget(current->fs->pwd);
  939. rootmnt = mntget(current->fs->rootmnt);
  940. root = dget(current->fs->root);
  941. read_unlock(&current->fs->lock);
  942. error = -ENOENT;
  943. /* Has the current directory has been unlinked? */
  944. spin_lock(&dcache_lock);
  945. if (pwd->d_parent == pwd || !list_empty(&pwd->d_hash)) {
  946. unsigned long len;
  947. char * cwd;
  948. cwd = __d_path(pwd, pwdmnt, root, rootmnt, page, PAGE_SIZE);
  949. spin_unlock(&dcache_lock);
  950. error = -ERANGE;
  951. len = PAGE_SIZE + page - cwd;
  952. if (len <= size) {
  953. error = len;
  954. if (copy_to_user(buf, cwd, len))
  955. error = -EFAULT;
  956. }
  957. } else
  958. spin_unlock(&dcache_lock);
  959. dput(pwd);
  960. mntput(pwdmnt);
  961. dput(root);
  962. mntput(rootmnt);
  963. free_page((unsigned long) page);
  964. return error;
  965. }
  966. /*
  967.  * Test whether new_dentry is a subdirectory of old_dentry.
  968.  *
  969.  * Trivially implemented using the dcache structure
  970.  */
  971. /**
  972.  * is_subdir - is new dentry a subdirectory of old_dentry
  973.  * @new_dentry: new dentry
  974.  * @old_dentry: old dentry
  975.  *
  976.  * Returns 1 if new_dentry is a subdirectory of the parent (at any depth).
  977.  * Returns 0 otherwise.
  978.  */
  979.   
  980. int is_subdir(struct dentry * new_dentry, struct dentry * old_dentry)
  981. {
  982. int result;
  983. result = 0;
  984. for (;;) {
  985. if (new_dentry != old_dentry) {
  986. struct dentry * parent = new_dentry->d_parent;
  987. if (parent == new_dentry)
  988. break;
  989. new_dentry = parent;
  990. continue;
  991. }
  992. result = 1;
  993. break;
  994. }
  995. return result;
  996. }
  997. void d_genocide(struct dentry *root)
  998. {
  999. struct dentry *this_parent = root;
  1000. struct list_head *next;
  1001. spin_lock(&dcache_lock);
  1002. repeat:
  1003. next = this_parent->d_subdirs.next;
  1004. resume:
  1005. while (next != &this_parent->d_subdirs) {
  1006. struct list_head *tmp = next;
  1007. struct dentry *dentry = list_entry(tmp, struct dentry, d_child);
  1008. next = tmp->next;
  1009. if (d_unhashed(dentry)||!dentry->d_inode)
  1010. continue;
  1011. if (!list_empty(&dentry->d_subdirs)) {
  1012. this_parent = dentry;
  1013. goto repeat;
  1014. }
  1015. atomic_dec(&dentry->d_count);
  1016. }
  1017. if (this_parent != root) {
  1018. next = this_parent->d_child.next; 
  1019. atomic_dec(&this_parent->d_count);
  1020. this_parent = this_parent->d_parent;
  1021. goto resume;
  1022. }
  1023. spin_unlock(&dcache_lock);
  1024. }
  1025. /**
  1026.  * find_inode_number - check for dentry with name
  1027.  * @dir: directory to check
  1028.  * @name: Name to find.
  1029.  *
  1030.  * Check whether a dentry already exists for the given name,
  1031.  * and return the inode number if it has an inode. Otherwise
  1032.  * 0 is returned.
  1033.  *
  1034.  * This routine is used to post-process directory listings for
  1035.  * filesystems using synthetic inode numbers, and is necessary
  1036.  * to keep getcwd() working.
  1037.  */
  1038.  
  1039. ino_t find_inode_number(struct dentry *dir, struct qstr *name)
  1040. {
  1041. struct dentry * dentry;
  1042. ino_t ino = 0;
  1043. /*
  1044.  * Check for a fs-specific hash function. Note that we must
  1045.  * calculate the standard hash first, as the d_op->d_hash()
  1046.  * routine may choose to leave the hash value unchanged.
  1047.  */
  1048. name->hash = full_name_hash(name->name, name->len);
  1049. if (dir->d_op && dir->d_op->d_hash)
  1050. {
  1051. if (dir->d_op->d_hash(dir, name) != 0)
  1052. goto out;
  1053. }
  1054. dentry = d_lookup(dir, name);
  1055. if (dentry)
  1056. {
  1057. if (dentry->d_inode)
  1058. ino = dentry->d_inode->i_ino;
  1059. dput(dentry);
  1060. }
  1061. out:
  1062. return ino;
  1063. }
  1064. static void __init dcache_init(unsigned long mempages)
  1065. {
  1066. struct list_head *d;
  1067. unsigned long order;
  1068. unsigned int nr_hash;
  1069. int i;
  1070. /* 
  1071.  * A constructor could be added for stable state like the lists,
  1072.  * but it is probably not worth it because of the cache nature
  1073.  * of the dcache. 
  1074.  * If fragmentation is too bad then the SLAB_HWCACHE_ALIGN
  1075.  * flag could be removed here, to hint to the allocator that
  1076.  * it should not try to get multiple page regions.  
  1077.  */
  1078. dentry_cache = kmem_cache_create("dentry_cache",
  1079.  sizeof(struct dentry),
  1080.  0,
  1081.  SLAB_HWCACHE_ALIGN,
  1082.  NULL, NULL);
  1083. if (!dentry_cache)
  1084. panic("Cannot create dentry cache");
  1085. #if PAGE_SHIFT < 13
  1086. mempages >>= (13 - PAGE_SHIFT);
  1087. #endif
  1088. mempages *= sizeof(struct list_head);
  1089. for (order = 0; ((1UL << order) << PAGE_SHIFT) < mempages; order++)
  1090. ;
  1091. do {
  1092. unsigned long tmp;
  1093. nr_hash = (1UL << order) * PAGE_SIZE /
  1094. sizeof(struct list_head);
  1095. d_hash_mask = (nr_hash - 1);
  1096. tmp = nr_hash;
  1097. d_hash_shift = 0;
  1098. while ((tmp >>= 1UL) != 0UL)
  1099. d_hash_shift++;
  1100. dentry_hashtable = (struct list_head *)
  1101. __get_free_pages(GFP_ATOMIC, order);
  1102. } while (dentry_hashtable == NULL && --order >= 0);
  1103. printk(KERN_INFO "Dentry cache hash table entries: %d (order: %ld, %ld bytes)n",
  1104. nr_hash, order, (PAGE_SIZE << order));
  1105. if (!dentry_hashtable)
  1106. panic("Failed to allocate dcache hash tablen");
  1107. d = dentry_hashtable;
  1108. i = nr_hash;
  1109. do {
  1110. INIT_LIST_HEAD(d);
  1111. d++;
  1112. i--;
  1113. } while (i);
  1114. }
  1115. static void init_buffer_head(void * foo, kmem_cache_t * cachep, unsigned long flags)
  1116. {
  1117. if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
  1118.     SLAB_CTOR_CONSTRUCTOR)
  1119. {
  1120. struct buffer_head * bh = (struct buffer_head *) foo;
  1121. memset(bh, 0, sizeof(*bh));
  1122. init_waitqueue_head(&bh->b_wait);
  1123. }
  1124. }
  1125. /* SLAB cache for __getname() consumers */
  1126. kmem_cache_t *names_cachep;
  1127. /* SLAB cache for file structures */
  1128. kmem_cache_t *filp_cachep;
  1129. /* SLAB cache for dquot structures */
  1130. kmem_cache_t *dquot_cachep;
  1131. /* SLAB cache for buffer_head structures */
  1132. kmem_cache_t *bh_cachep;
  1133. EXPORT_SYMBOL(bh_cachep);
  1134. extern void bdev_cache_init(void);
  1135. extern void cdev_cache_init(void);
  1136. extern void iobuf_cache_init(void);
  1137. void __init vfs_caches_init(unsigned long mempages)
  1138. {
  1139. bh_cachep = kmem_cache_create("buffer_head",
  1140. sizeof(struct buffer_head), 0,
  1141. SLAB_HWCACHE_ALIGN, init_buffer_head, NULL);
  1142. if(!bh_cachep)
  1143. panic("Cannot create buffer head SLAB cache");
  1144. names_cachep = kmem_cache_create("names_cache", 
  1145. PATH_MAX, 0, 
  1146. SLAB_HWCACHE_ALIGN, NULL, NULL);
  1147. if (!names_cachep)
  1148. panic("Cannot create names SLAB cache");
  1149. filp_cachep = kmem_cache_create("filp", 
  1150. sizeof(struct file), 0,
  1151. SLAB_HWCACHE_ALIGN, NULL, NULL);
  1152. if(!filp_cachep)
  1153. panic("Cannot create filp SLAB cache");
  1154. #if defined (CONFIG_QUOTA)
  1155. dquot_cachep = kmem_cache_create("dquot", 
  1156. sizeof(struct dquot), sizeof(unsigned long) * 4,
  1157. SLAB_HWCACHE_ALIGN, NULL, NULL);
  1158. if (!dquot_cachep)
  1159. panic("Cannot create dquot SLAB cache");
  1160. #endif
  1161. dcache_init(mempages);
  1162. inode_init(mempages);
  1163. files_init(mempages); 
  1164. mnt_init(mempages);
  1165. bdev_cache_init();
  1166. cdev_cache_init();
  1167. iobuf_cache_init();
  1168. }