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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  * Intermezzo. (C) 1998 Peter J. Braam
  3.  *   */
  4. #include <linux/types.h>
  5. #include <linux/kernel.h>
  6. #include <linux/sched.h>
  7. #include <linux/fs.h>
  8. #include <linux/slab.h>
  9. #include <linux/vmalloc.h>
  10. #include <linux/stat.h>
  11. #include <linux/errno.h>
  12. #include <linux/locks.h>
  13. #include <asm/segment.h>
  14. #include <asm/uaccess.h>
  15. #include <linux/string.h>
  16. #ifdef CONFIG_FS_XFS
  17. #include <linux/xfs_fs.h>
  18. #endif
  19. #include <linux/intermezzo_fs.h>
  20. #include <linux/intermezzo_upcall.h>
  21. #include <linux/intermezzo_psdev.h>
  22. #include <linux/intermezzo_kml.h>
  23. #include <linux/intermezzo_journal.h>
  24. #if 0
  25. /* XFS has journalling, but these functions do nothing yet... */
  26. static unsigned long presto_xfs_freespace(struct presto_file_set *fset,
  27.                                          struct super_block *sb)
  28. {
  29. #if 0
  30.         vfs_t *vfsp = LINVFS_GET_VFS(sb);
  31.         struct statvfs_t stat; 
  32.         bhv_desc_t *bdp;
  33.         unsigned long avail; 
  34.         int rc;
  35.         VFS_STATVFS(vfsp, &stat, NULL, rc);
  36.         avail = statp.f_bfree;
  37.         return sbp->sb_fdblocks;; 
  38. #endif
  39.         return 0x0fffffff;
  40. }
  41. /* start the filesystem journal operations */
  42. static void *
  43. presto_xfs_trans_start(struct presto_file_set *fset,
  44.        struct inode *inode, int op)
  45. {
  46. int xfs_op;
  47. /* do a free blocks check as in journal_ext3? does anything protect
  48.  * the space in that case or can it disappear out from under us
  49.  * anyway? */
  50. /* copied from xfs_trans.h, skipping header maze for now */
  51. #define XFS_TRANS_SETATTR_NOT_SIZE      1
  52. #define XFS_TRANS_SETATTR_SIZE          2
  53. #define XFS_TRANS_INACTIVE              3
  54. #define XFS_TRANS_CREATE                4
  55. #define XFS_TRANS_CREATE_TRUNC          5
  56. #define XFS_TRANS_TRUNCATE_FILE         6
  57. #define XFS_TRANS_REMOVE                7
  58. #define XFS_TRANS_LINK                  8
  59. #define XFS_TRANS_RENAME                9
  60. #define XFS_TRANS_MKDIR                 10
  61. #define XFS_TRANS_RMDIR                 11
  62. #define XFS_TRANS_SYMLINK               12
  63. /* map the op onto the values for XFS so it can do reservation. if
  64.  * we don't have enough info to differentiate between e.g. setattr
  65.  * with or without size, what do we do? will it adjust? */
  66. switch (op) {
  67. case PRESTO_OP_SETATTR:
  68. /* or XFS_TRANS_SETATTR_NOT_SIZE? */
  69.         xfs_op = XFS_TRANS_SETATTR_SIZE;
  70. break;
  71. case PRESTO_OP_CREATE:
  72. /* or CREATE_TRUNC? */
  73. xfs_op = XFS_TRANS_CREATE;
  74. break;
  75. case PRESTO_OP_LINK:
  76. xfs_op = XFS_TRANS_LINK;
  77. break;
  78. case PRESTO_OP_UNLINK:
  79. xfs_op = XFS_TRANS_REMOVE;
  80. break;
  81. case PRESTO_OP_SYMLINK:
  82. xfs_op = XFS_TRANS_SYMLINK;
  83. break;
  84. case PRESTO_OP_MKDIR:
  85. xfs_op = XFS_TRANS_MKDIR;
  86. break;
  87. case PRESTO_OP_RMDIR:
  88. xfs_op = XFS_TRANS_RMDIR;
  89. break;
  90. case PRESTO_OP_MKNOD:
  91. /* XXX can't find an analog for mknod? */
  92. xfs_op = XFS_TRANS_CREATE;
  93. break;
  94. case PRESTO_OP_RENAME:
  95. xfs_op = XFS_TRANS_RENAME;
  96. break;
  97. default:
  98. CDEBUG(D_JOURNAL, "invalid operation %d for journaln", op);
  99. return NULL;
  100. }
  101. return xfs_trans_start(inode, xfs_op);
  102. }
  103. static void presto_xfs_trans_commit(struct presto_file_set *fset, void *handle)
  104. {
  105. /* assert (handle == current->j_handle) */
  106. xfs_trans_stop(handle);
  107. }
  108. void presto_xfs_journal_file_data(struct inode *inode)
  109. {
  110.         return; 
  111. }
  112. struct journal_ops presto_xfs_journal_ops = {
  113.         tr_avail: presto_xfs_freespace,
  114.         tr_start:  presto_xfs_trans_start,
  115.         tr_commit: presto_xfs_trans_commit,
  116.         tr_journal_data: presto_xfs_journal_file_data
  117. };
  118. #endif /* CONFIG_XFS_FS */