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

Linux/Unix编程

开发平台:

Unix_Linux

  1. #ifndef __INTERMEZZO_KML_H
  2. #define __INTERMEZZO_KML_H
  3. #include <linux/version.h>
  4. #include <linux/intermezzo_psdev.h>
  5. #include <linux/fs.h>
  6. #include <linux/intermezzo_journal.h>
  7. #define PRESTO_KML_MAJOR_VERSION 0x00010000
  8. #define PRESTO_KML_MINOR_VERSION 0x00002001
  9. #define PRESTO_OP_NOOP          0
  10. #define PRESTO_OP_CREATE        1
  11. #define PRESTO_OP_MKDIR         2
  12. #define PRESTO_OP_UNLINK        3
  13. #define PRESTO_OP_RMDIR         4
  14. #define PRESTO_OP_CLOSE         5
  15. #define PRESTO_OP_SYMLINK       6
  16. #define PRESTO_OP_RENAME        7
  17. #define PRESTO_OP_SETATTR       8
  18. #define PRESTO_OP_LINK          9
  19. #define PRESTO_OP_OPEN          10
  20. #define PRESTO_OP_MKNOD         11
  21. #define PRESTO_OP_WRITE         12
  22. #define PRESTO_OP_RELEASE       13
  23. #define PRESTO_OP_TRUNC         14
  24. #define PRESTO_OP_SETEXTATTR    15
  25. #define PRESTO_OP_DELEXTATTR    16
  26. #define PRESTO_LML_DONE      1 /* flag to get first write to do LML */
  27. #define KML_KOP_MARK            0xffff
  28. struct presto_lml_data {
  29.         loff_t   rec_offset;
  30. };
  31. struct big_journal_prefix {
  32.         u32 len;
  33.         u32 version; 
  34.         u32 pid;
  35.         u32 uid;
  36.         u32 fsuid;
  37.         u32 fsgid;
  38.         u32 opcode;
  39.         u32 ngroups;
  40.         u32 groups[NGROUPS_MAX];
  41. };
  42. enum kml_opcode {
  43.         KML_CREATE = 1,
  44.         KML_MKDIR,
  45.         KML_UNLINK,
  46.         KML_RMDIR,
  47.         KML_CLOSE,
  48.         KML_SYMLINK,
  49.         KML_RENAME,
  50.         KML_SETATTR,
  51.         KML_LINK,
  52.         KML_OPEN,
  53.         KML_MKNOD,
  54.         KML_ENDMARK = 0xff
  55. };
  56. struct kml_create {
  57. char  *path;
  58. struct presto_version  new_objectv, 
  59. old_parentv, 
  60. new_parentv;
  61. int  mode;
  62. int  uid;
  63. int  gid;
  64. };
  65. struct kml_open {
  66. };
  67. struct kml_mkdir {
  68. char  *path;
  69. struct presto_version  new_objectv, 
  70. old_parentv, 
  71. new_parentv;
  72. int  mode;
  73. int  uid;
  74. int  gid;
  75. };
  76. struct kml_unlink {
  77. char  *path, 
  78. *name;
  79. struct presto_version  old_tgtv, 
  80. old_parentv, 
  81. new_parentv;
  82. };
  83. struct kml_rmdir {
  84. char  *path, 
  85. *name;
  86. struct presto_version  old_tgtv, 
  87. old_parentv, 
  88. new_parentv;
  89. };
  90. struct kml_close {
  91. int  open_mode, 
  92. open_uid, 
  93. open_gid;
  94. char  *path;
  95. struct presto_version  new_objectv;
  96. __u64  ino;
  97.        int  generation;
  98. };
  99. struct kml_symlink {
  100. char  *sourcepath, 
  101. *targetpath;
  102. struct presto_version  new_objectv, 
  103. old_parentv, 
  104. new_parentv;
  105.        int  uid;
  106. int  gid;
  107. };
  108. struct kml_rename {
  109. char  *sourcepath, 
  110. *targetpath;
  111. struct presto_version  old_objectv, 
  112. new_objectv, 
  113. old_tgtv, 
  114. new_tgtv;
  115. };
  116. struct kml_setattr {
  117. char  *path;
  118. struct presto_version  old_objectv;
  119. struct iattr  iattr;
  120. };
  121. struct kml_link {
  122. char  *sourcepath, 
  123. *targetpath;
  124. struct presto_version  new_objectv, 
  125. old_parentv, 
  126. new_parentv;
  127. };
  128. struct kml_mknod {
  129. char  *path;
  130. struct presto_version  new_objectv, 
  131. old_parentv, 
  132. new_parentv;
  133. int  mode;
  134.        int  uid;
  135. int  gid;
  136.         int  major;
  137. int  minor;
  138. };
  139. /* kml record items for optimizing */
  140. struct kml_kop_node
  141. {
  142.         u32             kml_recno;
  143.         u32             kml_flag;
  144.         u32             kml_op;
  145.         nlink_t         i_nlink;
  146.         u32             i_ino;
  147. };
  148. struct kml_kop_lnode
  149. {
  150.         struct list_head chains;
  151.         struct kml_kop_node node;
  152. };
  153. struct kml_endmark {
  154. u32 total;
  155. struct kml_kop_node  *kop;
  156. };
  157. /* kml_flag */
  158. #define  KML_REC_DELETE               1
  159. #define  KML_REC_EXIST                0
  160. struct kml_optimize {
  161. struct list_head kml_chains;
  162.         u32              kml_flag;
  163.         u32              kml_op;
  164.         nlink_t          i_nlink;
  165.         u32              i_ino;
  166. };
  167. struct kml_rec {
  168. /* attribute of this record */
  169. int  rec_size;
  170.         int      rec_kml_offset;
  171. struct  big_journal_prefix  rec_head;
  172. union {
  173. struct kml_create  create;
  174. struct kml_open  open;
  175. struct kml_mkdir  mkdir;
  176. struct kml_unlink  unlink;
  177. struct kml_rmdir  rmdir;
  178. struct kml_close  close;
  179. struct kml_symlink  symlink;
  180. struct kml_rename  rename;
  181. struct kml_setattr  setattr;
  182. struct kml_mknod  mknod;
  183. struct kml_link  link;
  184. struct kml_endmark      endmark;
  185. } rec_kml;
  186.         struct  journal_suffix  rec_tail;
  187.         /* for kml optimize only */
  188.         struct  kml_optimize kml_optimize;
  189. };
  190. /* kml record items for optimizing */
  191. extern void kml_kop_init (struct presto_file_set *fset);
  192. extern void kml_kop_addrec (struct presto_file_set *fset, 
  193. struct inode *ino, u32 op, u32 flag);
  194. extern int  kml_kop_flush (struct presto_file_set *fset);
  195. /* defined in kml_setup.c */
  196. extern int kml_init (struct presto_file_set *fset);
  197. extern int kml_cleanup (struct presto_file_set *fset);
  198. /* defined in kml.c */
  199. extern int begin_kml_reint (struct file *file, unsigned long arg);
  200. extern int do_kml_reint (struct file *file, unsigned long arg);
  201. extern int end_kml_reint (struct file *file, unsigned long arg);
  202. /* kml_utils.c */
  203. extern char *dlogit (void *tbuf, const void *sbuf, int size);
  204. extern char * bdup_printf (char *format, ...);
  205. /* defined in kml_decode.c */
  206. /* printop */
  207. #define  PRINT_KML_PREFIX             0x1
  208. #define  PRINT_KML_SUFFIX             0x2
  209. #define  PRINT_KML_REC                0x4
  210. #define  PRINT_KML_OPTIMIZE           0x8
  211. #define  PRINT_KML_EXIST              0x10
  212. #define  PRINT_KML_DELETE             0x20
  213. extern void   kml_printrec (struct kml_rec *rec, int printop);
  214. extern int    print_allkmlrec (struct list_head *head, int printop);
  215. extern int    delete_kmlrec (struct list_head *head);
  216. extern int    kml_decoderec (char *buf, int pos, int buflen, int *size,
  217.                      struct kml_rec **newrec);
  218. extern int decode_kmlrec (struct list_head *head, char *kml_buf, int buflen);
  219. extern void kml_freerec (struct kml_rec *rec);
  220. /* defined in kml_reint.c */
  221. #define KML_CLOSE_BACKFETCH            1
  222. extern int kml_reintbuf (struct  kml_fsdata *kml_fsdata,
  223.                    char *mtpt, struct kml_rec **rec);
  224. /* defined in kml_setup.c */
  225. extern int kml_init (struct presto_file_set *fset);
  226. extern int kml_cleanup (struct presto_file_set *fset);
  227. #endif