This commit was manufactured by cvs2svn to create branch 'vserver'.
[linux-2.6.git] / fs / intermezzo / intermezzo_kml.h
1 #ifndef __INTERMEZZO_KML_H
2 #define __INTERMEZZO_KML_H
3
4 #include "intermezzo_psdev.h"
5 #include <linux/fs.h>
6 #include "intermezzo_journal.h"
7
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
27
28 #define PRESTO_LML_DONE         1 /* flag to get first write to do LML */
29 #define KML_KOP_MARK            0xffff
30
31 struct presto_lml_data {
32         loff_t   rec_offset;
33 };
34
35 struct big_journal_prefix {
36         u32 len;
37         u32 version; 
38         u32 pid;
39         u32 uid;
40         u32 fsuid;
41         u32 fsgid;
42         u32 opcode;
43         u32 ngroups;
44         u32 groups[NGROUPS_SMALL];
45 };
46
47 enum kml_opcode {
48         KML_CREATE = 1,
49         KML_MKDIR,
50         KML_UNLINK,
51         KML_RMDIR,
52         KML_CLOSE,
53         KML_SYMLINK,
54         KML_RENAME,
55         KML_SETATTR,
56         KML_LINK,
57         KML_OPEN,
58         KML_MKNOD,
59         KML_ENDMARK = 0xff
60 };
61
62 struct kml_create {
63         char                    *path;
64         struct presto_version   new_objectv, 
65                                 old_parentv, 
66                                 new_parentv;
67         int                     mode;
68         int                     uid;
69         int                     gid;
70 };
71
72 struct kml_open {
73 };
74
75 struct kml_mkdir {
76         char                    *path;
77         struct presto_version   new_objectv, 
78                                 old_parentv, 
79                                 new_parentv;
80         int                     mode;
81         int                     uid;
82         int                     gid;
83 };
84
85 struct kml_unlink {
86         char                    *path,  
87                                 *name;
88         struct presto_version   old_tgtv, 
89                                 old_parentv, 
90                                 new_parentv;
91 };
92
93 struct kml_rmdir {
94         char                    *path, 
95                                 *name;
96         struct presto_version   old_tgtv, 
97                                 old_parentv, 
98                                 new_parentv;
99 };
100
101 struct kml_close {
102         int                     open_mode, 
103                                 open_uid, 
104                                 open_gid;
105         char                    *path;
106         struct presto_version   new_objectv;
107         __u64                   ino;
108         int                     generation;
109 };
110
111 struct kml_symlink {
112         char                    *sourcepath,    
113                                 *targetpath;
114         struct presto_version   new_objectv, 
115                                 old_parentv, 
116                                 new_parentv;
117         int                     uid;
118         int                     gid;
119 };
120
121 struct kml_rename {
122         char                    *sourcepath, 
123                                 *targetpath;
124         struct presto_version   old_objectv, 
125                                 new_objectv, 
126                                 old_tgtv, 
127                                 new_tgtv;
128 };
129
130 struct kml_setattr {
131         char                    *path;
132         struct presto_version   old_objectv;
133         struct iattr            iattr;
134 };
135
136 struct kml_link {
137         char                    *sourcepath,    
138                                 *targetpath;
139         struct presto_version   new_objectv, 
140                                 old_parentv, 
141                                 new_parentv;
142 };
143
144 struct kml_mknod {
145         char                    *path;
146         struct presto_version   new_objectv, 
147                                 old_parentv, 
148                                 new_parentv;
149         int                     mode;
150         int                     uid;
151         int                     gid;
152         int                     major;
153         int                     minor;
154 };
155
156 /* kml record items for optimizing */
157 struct kml_kop_node
158 {
159         u32             kml_recno;
160         u32             kml_flag;
161         u32             kml_op;
162         nlink_t         i_nlink;
163         u32             i_ino;
164 };
165
166 struct kml_kop_lnode
167 {
168         struct list_head chains;
169         struct kml_kop_node node;
170 };
171
172 struct kml_endmark {
173         u32                     total;
174         struct kml_kop_node     *kop;
175 };
176
177 /* kml_flag */
178 #define  KML_REC_DELETE               1
179 #define  KML_REC_EXIST                0
180
181 struct kml_optimize {
182         struct list_head kml_chains;
183         u32              kml_flag;
184         u32              kml_op;
185         nlink_t          i_nlink;
186         u32              i_ino;
187 };
188
189 struct kml_rec {
190         /* attribute of this record */
191         int                             rec_size;
192         int                             rec_kml_offset;
193
194         struct  big_journal_prefix      rec_head;
195         union {
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;
208         } rec_kml;
209         struct  journal_suffix          rec_tail;
210
211         /* for kml optimize only */
212         struct  kml_optimize kml_optimize;
213 };
214
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);
220
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);
224
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);
229
230 /* kml_utils.c */
231 extern char *dlogit (void *tbuf, const void *sbuf, int size);
232 extern char * bdup_printf (char *format, ...);
233
234 /* defined in kml_decode.c */
235 /* printop */
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);
249
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);
254
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);
258
259 #endif
260