1 #ifndef __INTERMEZZO_KML_H
2 #define __INTERMEZZO_KML_H
4 #include "intermezzo_psdev.h"
6 #include "intermezzo_journal.h"
8 #define PRESTO_KML_MAJOR_VERSION 0x00010000
9 #define PRESTO_KML_MINOR_VERSION 0x00002001
10 #define PRESTO_OP_NOOP 0
11 #define PRESTO_OP_CREATE 1
12 #define PRESTO_OP_MKDIR 2
13 #define PRESTO_OP_UNLINK 3
14 #define PRESTO_OP_RMDIR 4
15 #define PRESTO_OP_CLOSE 5
16 #define PRESTO_OP_SYMLINK 6
17 #define PRESTO_OP_RENAME 7
18 #define PRESTO_OP_SETATTR 8
19 #define PRESTO_OP_LINK 9
20 #define PRESTO_OP_OPEN 10
21 #define PRESTO_OP_MKNOD 11
22 #define PRESTO_OP_WRITE 12
23 #define PRESTO_OP_RELEASE 13
24 #define PRESTO_OP_TRUNC 14
25 #define PRESTO_OP_SETEXTATTR 15
26 #define PRESTO_OP_DELEXTATTR 16
28 #define PRESTO_LML_DONE 1 /* flag to get first write to do LML */
29 #define KML_KOP_MARK 0xffff
31 struct presto_lml_data {
35 struct big_journal_prefix {
44 u32 groups[NGROUPS_SMALL];
64 struct presto_version new_objectv,
77 struct presto_version new_objectv,
88 struct presto_version old_tgtv,
96 struct presto_version old_tgtv,
106 struct presto_version new_objectv;
114 struct presto_version new_objectv,
124 struct presto_version old_objectv,
132 struct presto_version old_objectv;
139 struct presto_version new_objectv,
146 struct presto_version new_objectv,
156 /* kml record items for optimizing */
168 struct list_head chains;
169 struct kml_kop_node node;
174 struct kml_kop_node *kop;
178 #define KML_REC_DELETE 1
179 #define KML_REC_EXIST 0
181 struct kml_optimize {
182 struct list_head kml_chains;
190 /* attribute of this record */
194 struct big_journal_prefix rec_head;
196 struct kml_create create;
197 struct kml_open open;
198 struct kml_mkdir mkdir;
199 struct kml_unlink unlink;
200 struct kml_rmdir rmdir;
201 struct kml_close close;
202 struct kml_symlink symlink;
203 struct kml_rename rename;
204 struct kml_setattr setattr;
205 struct kml_mknod mknod;
206 struct kml_link link;
207 struct kml_endmark endmark;
209 struct journal_suffix rec_tail;
211 /* for kml optimize only */
212 struct kml_optimize kml_optimize;
215 /* kml record items for optimizing */
216 extern void kml_kop_init (struct presto_file_set *fset);
217 extern void kml_kop_addrec (struct presto_file_set *fset,
218 struct inode *ino, u32 op, u32 flag);
219 extern int kml_kop_flush (struct presto_file_set *fset);
221 /* defined in kml_setup.c */
222 extern int kml_init (struct presto_file_set *fset);
223 extern int kml_cleanup (struct presto_file_set *fset);
225 /* defined in kml.c */
226 extern int begin_kml_reint (struct file *file, unsigned long arg);
227 extern int do_kml_reint (struct file *file, unsigned long arg);
228 extern int end_kml_reint (struct file *file, unsigned long arg);
231 extern char *dlogit (void *tbuf, const void *sbuf, int size);
232 extern char * bdup_printf (char *format, ...);
234 /* defined in kml_decode.c */
236 #define PRINT_KML_PREFIX 0x1
237 #define PRINT_KML_SUFFIX 0x2
238 #define PRINT_KML_REC 0x4
239 #define PRINT_KML_OPTIMIZE 0x8
240 #define PRINT_KML_EXIST 0x10
241 #define PRINT_KML_DELETE 0x20
242 extern void kml_printrec (struct kml_rec *rec, int printop);
243 extern int print_allkmlrec (struct list_head *head, int printop);
244 extern int delete_kmlrec (struct list_head *head);
245 extern int kml_decoderec (char *buf, int pos, int buflen, int *size,
246 struct kml_rec **newrec);
247 extern int decode_kmlrec (struct list_head *head, char *kml_buf, int buflen);
248 extern void kml_freerec (struct kml_rec *rec);
250 /* defined in kml_reint.c */
251 #define KML_CLOSE_BACKFETCH 1
252 extern int kml_reintbuf (struct kml_fsdata *kml_fsdata,
253 char *mtpt, struct kml_rec **rec);
255 /* defined in kml_setup.c */
256 extern int kml_init (struct presto_file_set *fset);
257 extern int kml_cleanup (struct presto_file_set *fset);