dcache.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:32k
源码类别:

嵌入式Linux

开发平台:

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 fileystem
  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. kmem_cache_shrink(dentry_cache);
  520. return 0;
  521. }
  522. #define NAME_ALLOC_LEN(len) ((len+16) & ~15)
  523. /**
  524.  * d_alloc - allocate a dcache entry
  525.  * @parent: parent of entry to allocate
  526.  * @name: qstr of the name
  527.  *
  528.  * Allocates a dentry. It returns %NULL if there is insufficient memory
  529.  * available. On a success the dentry is returned. The name passed in is
  530.  * copied and the copy passed in may be reused after this call.
  531.  */
  532.  
  533. struct dentry * d_alloc(struct dentry * parent, const struct qstr *name)
  534. {
  535. char * str;
  536. struct dentry *dentry;
  537. dentry = kmem_cache_alloc(dentry_cache, GFP_KERNEL); 
  538. if (!dentry)
  539. return NULL;
  540. if (name->len > DNAME_INLINE_LEN-1) {
  541. str = kmalloc(NAME_ALLOC_LEN(name->len), GFP_KERNEL);
  542. if (!str) {
  543. kmem_cache_free(dentry_cache, dentry); 
  544. return NULL;
  545. }
  546. } else
  547. str = dentry->d_iname; 
  548. memcpy(str, name->name, name->len);
  549. str[name->len] = 0;
  550. atomic_set(&dentry->d_count, 1);
  551. dentry->d_vfs_flags = 0;
  552. dentry->d_flags = 0;
  553. dentry->d_inode = NULL;
  554. dentry->d_parent = NULL;
  555. dentry->d_sb = NULL;
  556. dentry->d_name.name = str;
  557. dentry->d_name.len = name->len;
  558. dentry->d_name.hash = name->hash;
  559. dentry->d_op = NULL;
  560. dentry->d_fsdata = NULL;
  561. dentry->d_mounted = 0;
  562. INIT_LIST_HEAD(&dentry->d_hash);
  563. INIT_LIST_HEAD(&dentry->d_lru);
  564. INIT_LIST_HEAD(&dentry->d_subdirs);
  565. INIT_LIST_HEAD(&dentry->d_alias);
  566. if (parent) {
  567. dentry->d_parent = dget(parent);
  568. dentry->d_sb = parent->d_sb;
  569. spin_lock(&dcache_lock);
  570. list_add(&dentry->d_child, &parent->d_subdirs);
  571. spin_unlock(&dcache_lock);
  572. } else
  573. INIT_LIST_HEAD(&dentry->d_child);
  574. dentry_stat.nr_dentry++;
  575. return dentry;
  576. }
  577. /**
  578.  * d_instantiate - fill in inode information for a dentry
  579.  * @entry: dentry to complete
  580.  * @inode: inode to attach to this dentry
  581.  *
  582.  * Fill in inode information in the entry.
  583.  *
  584.  * This turns negative dentries into productive full members
  585.  * of society.
  586.  *
  587.  * NOTE! This assumes that the inode count has been incremented
  588.  * (or otherwise set) by the caller to indicate that it is now
  589.  * in use by the dcache.
  590.  */
  591.  
  592. void d_instantiate(struct dentry *entry, struct inode * inode)
  593. {
  594. if (!list_empty(&entry->d_alias)) BUG();
  595. spin_lock(&dcache_lock);
  596. if (inode)
  597. list_add(&entry->d_alias, &inode->i_dentry);
  598. entry->d_inode = inode;
  599. spin_unlock(&dcache_lock);
  600. }
  601. /**
  602.  * d_alloc_root - allocate root dentry
  603.  * @root_inode: inode to allocate the root for
  604.  *
  605.  * Allocate a root ("/") dentry for the inode given. The inode is
  606.  * instantiated and returned. %NULL is returned if there is insufficient
  607.  * memory or the inode passed is %NULL.
  608.  */
  609.  
  610. struct dentry * d_alloc_root(struct inode * root_inode)
  611. {
  612. struct dentry *res = NULL;
  613. if (root_inode) {
  614. res = d_alloc(NULL, &(const struct qstr) { "/", 1, 0 });
  615. if (res) {
  616. res->d_sb = root_inode->i_sb;
  617. res->d_parent = res;
  618. d_instantiate(res, root_inode);
  619. }
  620. }
  621. return res;
  622. }
  623. static inline struct list_head * d_hash(struct dentry * parent, unsigned long hash)
  624. {
  625. hash += (unsigned long) parent / L1_CACHE_BYTES;
  626. hash = hash ^ (hash >> D_HASHBITS);
  627. return dentry_hashtable + (hash & D_HASHMASK);
  628. }
  629. /**
  630.  * d_lookup - search for a dentry
  631.  * @parent: parent dentry
  632.  * @name: qstr of name we wish to find
  633.  *
  634.  * Searches the children of the parent dentry for the name in question. If
  635.  * the dentry is found its reference count is incremented and the dentry
  636.  * is returned. The caller must use d_put to free the entry when it has
  637.  * finished using it. %NULL is returned on failure.
  638.  */
  639.  
  640. struct dentry * d_lookup(struct dentry * parent, struct qstr * name)
  641. {
  642. unsigned int len = name->len;
  643. unsigned int hash = name->hash;
  644. const unsigned char *str = name->name;
  645. struct list_head *head = d_hash(parent,hash);
  646. struct list_head *tmp;
  647. spin_lock(&dcache_lock);
  648. tmp = head->next;
  649. for (;;) {
  650. struct dentry * dentry = list_entry(tmp, struct dentry, d_hash);
  651. if (tmp == head)
  652. break;
  653. tmp = tmp->next;
  654. if (dentry->d_name.hash != hash)
  655. continue;
  656. if (dentry->d_parent != parent)
  657. continue;
  658. if (parent->d_op && parent->d_op->d_compare) {
  659. if (parent->d_op->d_compare(parent, &dentry->d_name, name))
  660. continue;
  661. } else {
  662. if (dentry->d_name.len != len)
  663. continue;
  664. if (memcmp(dentry->d_name.name, str, len))
  665. continue;
  666. }
  667. __dget_locked(dentry);
  668. dentry->d_vfs_flags |= DCACHE_REFERENCED;
  669. spin_unlock(&dcache_lock);
  670. return dentry;
  671. }
  672. spin_unlock(&dcache_lock);
  673. return NULL;
  674. }
  675. /**
  676.  * d_validate - verify dentry provided from insecure source
  677.  * @dentry: The dentry alleged to be valid child of @dparent
  678.  * @dparent: The parent dentry (known to be valid)
  679.  * @hash: Hash of the dentry
  680.  * @len: Length of the name
  681.  *
  682.  * An insecure source has sent us a dentry, here we verify it and dget() it.
  683.  * This is used by ncpfs in its readdir implementation.
  684.  * Zero is returned in the dentry is invalid.
  685.  */
  686.  
  687. int d_validate(struct dentry *dentry, struct dentry *dparent)
  688. {
  689. unsigned long dent_addr = (unsigned long) dentry;
  690. unsigned long min_addr = PAGE_OFFSET;
  691. unsigned long align_mask = 0x0F;
  692. struct list_head *base, *lhp;
  693. if (dent_addr < min_addr)
  694. goto out;
  695. if (dent_addr > (unsigned long)high_memory - sizeof(struct dentry))
  696. goto out;
  697. if (dent_addr & align_mask)
  698. goto out;
  699. if ((!kern_addr_valid(dent_addr)) || (!kern_addr_valid(dent_addr -1 +
  700. sizeof(struct dentry))))
  701. goto out;
  702. if (dentry->d_parent != dparent)
  703. goto out;
  704. spin_lock(&dcache_lock);
  705. lhp = base = d_hash(dparent, dentry->d_name.hash);
  706. while ((lhp = lhp->next) != base) {
  707. if (dentry == list_entry(lhp, struct dentry, d_hash)) {
  708. __dget_locked(dentry);
  709. spin_unlock(&dcache_lock);
  710. return 1;
  711. }
  712. }
  713. spin_unlock(&dcache_lock);
  714. out:
  715. return 0;
  716. }
  717. /*
  718.  * When a file is deleted, we have two options:
  719.  * - turn this dentry into a negative dentry
  720.  * - unhash this dentry and free it.
  721.  *
  722.  * Usually, we want to just turn this into
  723.  * a negative dentry, but if anybody else is
  724.  * currently using the dentry or the inode
  725.  * we can't do that and we fall back on removing
  726.  * it from the hash queues and waiting for
  727.  * it to be deleted later when it has no users
  728.  */
  729.  
  730. /**
  731.  * d_delete - delete a dentry
  732.  * @dentry: The dentry to delete
  733.  *
  734.  * Turn the dentry into a negative dentry if possible, otherwise
  735.  * remove it from the hash queues so it can be deleted later
  736.  */
  737.  
  738. void d_delete(struct dentry * dentry)
  739. {
  740. /*
  741.  * Are we the only user?
  742.  */
  743. spin_lock(&dcache_lock);
  744. if (atomic_read(&dentry->d_count) == 1) {
  745. dentry_iput(dentry);
  746. return;
  747. }
  748. spin_unlock(&dcache_lock);
  749. /*
  750.  * If not, just drop the dentry and let dput
  751.  * pick up the tab..
  752.  */
  753. d_drop(dentry);
  754. }
  755. /**
  756.  * d_rehash - add an entry back to the hash
  757.  * @entry: dentry to add to the hash
  758.  *
  759.  * Adds a dentry to the hash according to its name.
  760.  */
  761.  
  762. void d_rehash(struct dentry * entry)
  763. {
  764. struct list_head *list = d_hash(entry->d_parent, entry->d_name.hash);
  765. if (!list_empty(&entry->d_hash)) BUG();
  766. spin_lock(&dcache_lock);
  767. list_add(&entry->d_hash, list);
  768. spin_unlock(&dcache_lock);
  769. }
  770. #define do_switch(x,y) do { 
  771. __typeof__ (x) __tmp = x; 
  772. x = y; y = __tmp; } while (0)
  773. /*
  774.  * When switching names, the actual string doesn't strictly have to
  775.  * be preserved in the target - because we're dropping the target
  776.  * anyway. As such, we can just do a simple memcpy() to copy over
  777.  * the new name before we switch.
  778.  *
  779.  * Note that we have to be a lot more careful about getting the hash
  780.  * switched - we have to switch the hash value properly even if it
  781.  * then no longer matches the actual (corrupted) string of the target.
  782.  * The hash value has to match the hash queue that the dentry is on..
  783.  */
  784. static inline void switch_names(struct dentry * dentry, struct dentry * target)
  785. {
  786. const unsigned char *old_name, *new_name;
  787. check_lock();
  788. memcpy(dentry->d_iname, target->d_iname, DNAME_INLINE_LEN); 
  789. old_name = target->d_name.name;
  790. new_name = dentry->d_name.name;
  791. if (old_name == target->d_iname)
  792. old_name = dentry->d_iname;
  793. if (new_name == dentry->d_iname)
  794. new_name = target->d_iname;
  795. target->d_name.name = new_name;
  796. dentry->d_name.name = old_name;
  797. }
  798. /*
  799.  * We cannibalize "target" when moving dentry on top of it,
  800.  * because it's going to be thrown away anyway. We could be more
  801.  * polite about it, though.
  802.  *
  803.  * This forceful removal will result in ugly /proc output if
  804.  * somebody holds a file open that got deleted due to a rename.
  805.  * We could be nicer about the deleted file, and let it show
  806.  * up under the name it got deleted rather than the name that
  807.  * deleted it.
  808.  *
  809.  * Careful with the hash switch. The hash switch depends on
  810.  * the fact that any list-entry can be a head of the list.
  811.  * Think about it.
  812.  */
  813.  
  814. /**
  815.  * d_move - move a dentry
  816.  * @dentry: entry to move
  817.  * @target: new dentry
  818.  *
  819.  * Update the dcache to reflect the move of a file name. Negative
  820.  * dcache entries should not be moved in this way.
  821.  */
  822.   
  823. void d_move(struct dentry * dentry, struct dentry * target)
  824. {
  825. check_lock();
  826. if (!dentry->d_inode)
  827. printk(KERN_WARNING "VFS: moving negative dcache entryn");
  828. spin_lock(&dcache_lock);
  829. /* Move the dentry to the target hash queue */
  830. list_del(&dentry->d_hash);
  831. list_add(&dentry->d_hash, &target->d_hash);
  832. /* Unhash the target: dput() will then get rid of it */
  833. list_del_init(&target->d_hash);
  834. list_del(&dentry->d_child);
  835. list_del(&target->d_child);
  836. /* Switch the parents and the names.. */
  837. switch_names(dentry, target);
  838. do_switch(dentry->d_parent, target->d_parent);
  839. do_switch(dentry->d_name.len, target->d_name.len);
  840. do_switch(dentry->d_name.hash, target->d_name.hash);
  841. /* And add them back to the (new) parent lists */
  842. list_add(&target->d_child, &target->d_parent->d_subdirs);
  843. list_add(&dentry->d_child, &dentry->d_parent->d_subdirs);
  844. spin_unlock(&dcache_lock);
  845. }
  846. /**
  847.  * d_path - return the path of a dentry
  848.  * @dentry: dentry to report
  849.  * @vfsmnt: vfsmnt to which the dentry belongs
  850.  * @root: root dentry
  851.  * @rootmnt: vfsmnt to which the root dentry belongs
  852.  * @buffer: buffer to return value in
  853.  * @buflen: buffer length
  854.  *
  855.  * Convert a dentry into an ASCII path name. If the entry has been deleted
  856.  * the string " (deleted)" is appended. Note that this is ambiguous. Returns
  857.  * the buffer.
  858.  *
  859.  * "buflen" should be %PAGE_SIZE or more. Caller holds the dcache_lock.
  860.  */
  861. char * __d_path(struct dentry *dentry, struct vfsmount *vfsmnt,
  862. struct dentry *root, struct vfsmount *rootmnt,
  863. char *buffer, int buflen)
  864. {
  865. char * end = buffer+buflen;
  866. char * retval;
  867. int namelen;
  868. *--end = '';
  869. buflen--;
  870. if (!IS_ROOT(dentry) && list_empty(&dentry->d_hash)) {
  871. buflen -= 10;
  872. end -= 10;
  873. memcpy(end, " (deleted)", 10);
  874. }
  875. /* Get '/' right */
  876. retval = end-1;
  877. *retval = '/';
  878. for (;;) {
  879. struct dentry * parent;
  880. if (dentry == root && vfsmnt == rootmnt)
  881. break;
  882. if (dentry == vfsmnt->mnt_root || IS_ROOT(dentry)) {
  883. /* Global root? */
  884. if (vfsmnt->mnt_parent == vfsmnt)
  885. goto global_root;
  886. dentry = vfsmnt->mnt_mountpoint;
  887. vfsmnt = vfsmnt->mnt_parent;
  888. continue;
  889. }
  890. parent = dentry->d_parent;
  891. namelen = dentry->d_name.len;
  892. buflen -= namelen + 1;
  893. if (buflen < 0)
  894. break;
  895. end -= namelen;
  896. memcpy(end, dentry->d_name.name, namelen);
  897. *--end = '/';
  898. retval = end;
  899. dentry = parent;
  900. }
  901. return retval;
  902. global_root:
  903. namelen = dentry->d_name.len;
  904. buflen -= namelen;
  905. if (buflen >= 0) {
  906. retval -= namelen-1; /* hit the slash */
  907. memcpy(retval, dentry->d_name.name, namelen);
  908. }
  909. return retval;
  910. }
  911. /*
  912.  * NOTE! The user-level library version returns a
  913.  * character pointer. The kernel system call just
  914.  * returns the length of the buffer filled (which
  915.  * includes the ending '' character), or a negative
  916.  * error value. So libc would do something like
  917.  *
  918.  * char *getcwd(char * buf, size_t size)
  919.  * {
  920.  * int retval;
  921.  *
  922.  * retval = sys_getcwd(buf, size);
  923.  * if (retval >= 0)
  924.  * return buf;
  925.  * errno = -retval;
  926.  * return NULL;
  927.  * }
  928.  */
  929. asmlinkage long sys_getcwd(char *buf, unsigned long size)
  930. {
  931. int error;
  932. struct vfsmount *pwdmnt, *rootmnt;
  933. struct dentry *pwd, *root;
  934. char *page = (char *) __get_free_page(GFP_USER);
  935. if (!page)
  936. return -ENOMEM;
  937. read_lock(&current->fs->lock);
  938. pwdmnt = mntget(current->fs->pwdmnt);
  939. pwd = dget(current->fs->pwd);
  940. rootmnt = mntget(current->fs->rootmnt);
  941. root = dget(current->fs->root);
  942. read_unlock(&current->fs->lock);
  943. error = -ENOENT;
  944. /* Has the current directory has been unlinked? */
  945. spin_lock(&dcache_lock);
  946. if (pwd->d_parent == pwd || !list_empty(&pwd->d_hash)) {
  947. unsigned long len;
  948. char * cwd;
  949. cwd = __d_path(pwd, pwdmnt, root, rootmnt, page, PAGE_SIZE);
  950. spin_unlock(&dcache_lock);
  951. error = -ERANGE;
  952. len = PAGE_SIZE + page - cwd;
  953. if (len <= size) {
  954. error = len;
  955. if (copy_to_user(buf, cwd, len))
  956. error = -EFAULT;
  957. }
  958. } else
  959. spin_unlock(&dcache_lock);
  960. dput(pwd);
  961. mntput(pwdmnt);
  962. dput(root);
  963. mntput(rootmnt);
  964. free_page((unsigned long) page);
  965. return error;
  966. }
  967. /*
  968.  * Test whether new_dentry is a subdirectory of old_dentry.
  969.  *
  970.  * Trivially implemented using the dcache structure
  971.  */
  972. /**
  973.  * is_subdir - is new dentry a subdirectory of old_dentry
  974.  * @new_dentry: new dentry
  975.  * @old_dentry: old dentry
  976.  *
  977.  * Returns 1 if new_dentry is a subdirectory of the parent (at any depth).
  978.  * Returns 0 otherwise.
  979.  */
  980.   
  981. int is_subdir(struct dentry * new_dentry, struct dentry * old_dentry)
  982. {
  983. int result;
  984. result = 0;
  985. for (;;) {
  986. if (new_dentry != old_dentry) {
  987. struct dentry * parent = new_dentry->d_parent;
  988. if (parent == new_dentry)
  989. break;
  990. new_dentry = parent;
  991. continue;
  992. }
  993. result = 1;
  994. break;
  995. }
  996. return result;
  997. }
  998. void d_genocide(struct dentry *root)
  999. {
  1000. struct dentry *this_parent = root;
  1001. struct list_head *next;
  1002. spin_lock(&dcache_lock);
  1003. repeat:
  1004. next = this_parent->d_subdirs.next;
  1005. resume:
  1006. while (next != &this_parent->d_subdirs) {
  1007. struct list_head *tmp = next;
  1008. struct dentry *dentry = list_entry(tmp, struct dentry, d_child);
  1009. next = tmp->next;
  1010. if (d_unhashed(dentry)||!dentry->d_inode)
  1011. continue;
  1012. if (!list_empty(&dentry->d_subdirs)) {
  1013. this_parent = dentry;
  1014. goto repeat;
  1015. }
  1016. atomic_dec(&dentry->d_count);
  1017. }
  1018. if (this_parent != root) {
  1019. next = this_parent->d_child.next; 
  1020. atomic_dec(&this_parent->d_count);
  1021. this_parent = this_parent->d_parent;
  1022. goto resume;
  1023. }
  1024. spin_unlock(&dcache_lock);
  1025. }
  1026. /**
  1027.  * find_inode_number - check for dentry with name
  1028.  * @dir: directory to check
  1029.  * @name: Name to find.
  1030.  *
  1031.  * Check whether a dentry already exists for the given name,
  1032.  * and return the inode number if it has an inode. Otherwise
  1033.  * 0 is returned.
  1034.  *
  1035.  * This routine is used to post-process directory listings for
  1036.  * filesystems using synthetic inode numbers, and is necessary
  1037.  * to keep getcwd() working.
  1038.  */
  1039.  
  1040. ino_t find_inode_number(struct dentry *dir, struct qstr *name)
  1041. {
  1042. struct dentry * dentry;
  1043. ino_t ino = 0;
  1044. /*
  1045.  * Check for a fs-specific hash function. Note that we must
  1046.  * calculate the standard hash first, as the d_op->d_hash()
  1047.  * routine may choose to leave the hash value unchanged.
  1048.  */
  1049. name->hash = full_name_hash(name->name, name->len);
  1050. if (dir->d_op && dir->d_op->d_hash)
  1051. {
  1052. if (dir->d_op->d_hash(dir, name) != 0)
  1053. goto out;
  1054. }
  1055. dentry = d_lookup(dir, name);
  1056. if (dentry)
  1057. {
  1058. if (dentry->d_inode)
  1059. ino = dentry->d_inode->i_ino;
  1060. dput(dentry);
  1061. }
  1062. out:
  1063. return ino;
  1064. }
  1065. static void __init dcache_init(unsigned long mempages)
  1066. {
  1067. struct list_head *d;
  1068. unsigned long order;
  1069. unsigned int nr_hash;
  1070. int i;
  1071. /* 
  1072.  * A constructor could be added for stable state like the lists,
  1073.  * but it is probably not worth it because of the cache nature
  1074.  * of the dcache. 
  1075.  * If fragmentation is too bad then the SLAB_HWCACHE_ALIGN
  1076.  * flag could be removed here, to hint to the allocator that
  1077.  * it should not try to get multiple page regions.  
  1078.  */
  1079. dentry_cache = kmem_cache_create("dentry_cache",
  1080.  sizeof(struct dentry),
  1081.  0,
  1082.  SLAB_HWCACHE_ALIGN,
  1083.  NULL, NULL);
  1084. if (!dentry_cache)
  1085. panic("Cannot create dentry cache");
  1086. #if PAGE_SHIFT < 13
  1087. mempages >>= (13 - PAGE_SHIFT);
  1088. #endif
  1089. mempages *= sizeof(struct list_head);
  1090. for (order = 0; ((1UL << order) << PAGE_SHIFT) < mempages; order++)
  1091. ;
  1092. do {
  1093. unsigned long tmp;
  1094. nr_hash = (1UL << order) * PAGE_SIZE /
  1095. sizeof(struct list_head);
  1096. d_hash_mask = (nr_hash - 1);
  1097. tmp = nr_hash;
  1098. d_hash_shift = 0;
  1099. while ((tmp >>= 1UL) != 0UL)
  1100. d_hash_shift++;
  1101. dentry_hashtable = (struct list_head *)
  1102. __get_free_pages(GFP_ATOMIC, order);
  1103. } while (dentry_hashtable == NULL && --order >= 0);
  1104. printk("Dentry-cache hash table entries: %d (order: %ld, %ld bytes)n",
  1105. nr_hash, order, (PAGE_SIZE << order));
  1106. if (!dentry_hashtable)
  1107. panic("Failed to allocate dcache hash tablen");
  1108. d = dentry_hashtable;
  1109. i = nr_hash;
  1110. do {
  1111. INIT_LIST_HEAD(d);
  1112. d++;
  1113. i--;
  1114. } while (i);
  1115. }
  1116. static void init_buffer_head(void * foo, kmem_cache_t * cachep, unsigned long flags)
  1117. {
  1118. if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
  1119.     SLAB_CTOR_CONSTRUCTOR)
  1120. {
  1121. struct buffer_head * bh = (struct buffer_head *) foo;
  1122. memset(bh, 0, sizeof(*bh));
  1123. init_waitqueue_head(&bh->b_wait);
  1124. }
  1125. }
  1126. /* SLAB cache for __getname() consumers */
  1127. kmem_cache_t *names_cachep;
  1128. /* SLAB cache for file structures */
  1129. kmem_cache_t *filp_cachep;
  1130. /* SLAB cache for dquot structures */
  1131. kmem_cache_t *dquot_cachep;
  1132. /* SLAB cache for buffer_head structures */
  1133. kmem_cache_t *bh_cachep;
  1134. EXPORT_SYMBOL(bh_cachep);
  1135. extern void bdev_cache_init(void);
  1136. extern void cdev_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. mnt_init(mempages);
  1164. bdev_cache_init();
  1165. cdev_cache_init();
  1166. }