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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * Directory operations for InterMezzo filesystem
  3.  * Original version: (C) 1996 P. Braam and M. Callahan
  4.  * Rewritten for Linux 2.1. (C) 1997 Carnegie Mellon University
  5.  *
  6.  * Stelias encourages users to contribute improvements to
  7.  * the InterMezzo project. Contact Peter Braam (coda@stelias.com).
  8.  */
  9. #define __NO_VERSION__
  10. #include <linux/types.h>
  11. #include <linux/kernel.h>
  12. #include <linux/sched.h>
  13. #include <linux/fs.h>
  14. #include <linux/stat.h>
  15. #include <linux/errno.h>
  16. #include <linux/locks.h>
  17. #include <asm/segment.h>
  18. #include <asm/uaccess.h>
  19. #include <linux/string.h>
  20. #include <linux/intermezzo_fs.h>
  21. static int presto_dentry_revalidate(struct dentry *de, int );
  22. /* called when a cache lookup succeeds */
  23. static int presto_dentry_revalidate(struct dentry *de, int flag)
  24. {
  25. struct inode *inode = de->d_inode;
  26. ENTRY;
  27. if (!inode) {
  28. EXIT;
  29. return 1;
  30. }
  31. if (is_bad_inode(inode)) {
  32. EXIT;
  33. return 0;
  34. }
  35. if ( S_ISDIR(inode->i_mode) ) {
  36. EXIT;
  37. return (presto_chk(de, PRESTO_DATA) &&
  38. (presto_chk(de, PRESTO_ATTR)));
  39. } else {
  40. EXIT;
  41. return presto_chk(de, PRESTO_ATTR);
  42. }
  43. }
  44. static void presto_dentry_iput(struct dentry *dentry, struct inode *inode)
  45. {
  46. dentry->d_time = 0;
  47. iput(inode);
  48. }
  49. struct dentry_operations presto_dentry_ops = 
  50. {
  51. d_revalidate: presto_dentry_revalidate,
  52.         d_iput: presto_dentry_iput
  53. };