1 #ifndef __INTERMEZZO_KML_H
2 #define __INTERMEZZO_KML_H
4 #include <linux/version.h>
5 #include <linux/intermezzo_psdev.h>
7 #include <linux/intermezzo_journal.h>
9 #define PRESTO_KML_MAJOR_VERSION 0x00010000
10 #define PRESTO_KML_MINOR_VERSION 0x00002001
11 #define PRESTO_OP_NOOP 0
12 #define PRESTO_OP_CREATE 1
13 #define PRESTO_OP_MKDIR 2
14 #define PRESTO_OP_UNLINK 3
15 #define PRESTO_OP_RMDIR 4
16 #define PRESTO_OP_CLOSE 5
17 #define PRESTO_OP_SYMLINK 6
18 #define PRESTO_OP_RENAME 7
19 #define PRESTO_OP_SETATTR 8
20 #define PRESTO_OP_LINK 9
21 #define PRESTO_OP_OPEN 10
22 #define PRESTO_OP_MKNOD 11
23 #define PRESTO_OP_WRITE 12
24 #define PRESTO_OP_RELEASE 13
25 #define PRESTO_OP_TRUNC 14
26 #define PRESTO_OP_SETEXTATTR 15
27 #define PRESTO_OP_DELEXTATTR 16
29 #define PRESTO_LML_DONE 1 /* flag to get first write to do LML */
30 #define KML_KOP_MARK 0xffff
32 struct presto_lml_data {
36 struct big_journal_prefix {
45 u32 groups[NGROUPS_MAX];
65 struct presto_version new_objectv,
78 struct presto_version new_objectv,
89 struct presto_version old_tgtv,
97 struct presto_version old_tgtv,
107 struct presto_version new_objectv;
115 struct presto_version new_objectv,
125 struct presto_version old_objectv,
133 struct presto_version old_objectv;
140 struct presto_version new_objectv,
147 struct presto_version new_objectv,
157 /* kml record items for optimizing */
169 struct list_head chains;
170 struct kml_kop_node node;
175 struct kml_kop_node *kop;
179 #define KML_REC_DELETE 1
180 #define KML_REC_EXIST 0
182 struct kml_optimize {
183 struct list_head kml_chains;
191 /* attribute of this record */
195 struct big_journal_prefix rec_head;
197 struct kml_create create;
198 struct kml_open open;
199 struct kml_mkdir mkdir;
200 struct kml_unlink unlink;
201 struct kml_rmdir rmdir;
202 struct kml_close close;
203 struct kml_symlink symlink;
204 struct kml_rename rename;
205 struct kml_setattr setattr;
206 struct kml_mknod mknod;
207 struct kml_link link;
208 struct kml_endmark endmark;
210 struct journal_suffix rec_tail;
212 /* for kml optimize only */
213 struct kml_optimize kml_optimize;
216 /* kml record items for optimizing */
217 extern void kml_kop_init (struct presto_file_set *fset);
218 extern void kml_kop_addrec (struct presto_file_set *fset,
219 struct inode *ino, u32 op, u32 flag);
220 extern int kml_kop_flush (struct presto_file_set *fset);
222 /* defined in kml_setup.c */
223 extern int kml_init (struct presto_file_set *fset);
224 extern int kml_cleanup (struct presto_file_set *fset);
226 /* defined in kml.c */
227 extern int begin_kml_reint (struct file *file, unsigned long arg);
228 extern int do_kml_reint (struct file *file, unsigned long arg);
229 extern int end_kml_reint (struct file *file, unsigned long arg);
232 extern char *dlogit (void *tbuf, const void *sbuf, int size);
233 extern char * bdup_printf (char *format, ...);
235 /* defined in kml_decode.c */
237 #define PRINT_KML_PREFIX 0x1
238 #define PRINT_KML_SUFFIX 0x2
239 #define PRINT_KML_REC 0x4
240 #define PRINT_KML_OPTIMIZE 0x8
241 #define PRINT_KML_EXIST 0x10
242 #define PRINT_KML_DELETE 0x20
243 extern void kml_printrec (struct kml_rec *rec, int printop);
244 extern int print_allkmlrec (struct list_head *head, int printop);
245 extern int delete_kmlrec (struct list_head *head);
246 extern int kml_decoderec (char *buf, int pos, int buflen, int *size,
247 struct kml_rec **newrec);
248 extern int decode_kmlrec (struct list_head *head, char *kml_buf, int buflen);
249 extern void kml_freerec (struct kml_rec *rec);
251 /* defined in kml_reint.c */
252 #define KML_CLOSE_BACKFETCH 1
253 extern int kml_reintbuf (struct kml_fsdata *kml_fsdata,
254 char *mtpt, struct kml_rec **rec);
256 /* defined in kml_setup.c */
257 extern int kml_init (struct presto_file_set *fset);
258 extern int kml_cleanup (struct presto_file_set *fset);