patch-2.4.15 linux/include/linux/intermezzo_kml.h
Next file: linux/include/linux/intermezzo_psdev.h
Previous file: linux/include/linux/intermezzo_journal.h
Back to the patch index
Back to the overall index
- Lines: 262
- Date:
Sun Nov 11 10:20:21 2001
- Orig file:
v2.4.14/linux/include/linux/intermezzo_kml.h
- Orig date:
Wed Dec 31 16:00:00 1969
diff -u --recursive --new-file v2.4.14/linux/include/linux/intermezzo_kml.h linux/include/linux/intermezzo_kml.h
@@ -0,0 +1,261 @@
+#ifndef __INTERMEZZO_KML_H
+#define __INTERMEZZO_KML_H
+
+#include <linux/version.h>
+#include <linux/intermezzo_psdev.h>
+#include <linux/fs.h>
+#include <linux/intermezzo_journal.h>
+
+#define PRESTO_KML_MAJOR_VERSION 0x00010000
+#define PRESTO_KML_MINOR_VERSION 0x00002001
+#define PRESTO_OP_NOOP 0
+#define PRESTO_OP_CREATE 1
+#define PRESTO_OP_MKDIR 2
+#define PRESTO_OP_UNLINK 3
+#define PRESTO_OP_RMDIR 4
+#define PRESTO_OP_CLOSE 5
+#define PRESTO_OP_SYMLINK 6
+#define PRESTO_OP_RENAME 7
+#define PRESTO_OP_SETATTR 8
+#define PRESTO_OP_LINK 9
+#define PRESTO_OP_OPEN 10
+#define PRESTO_OP_MKNOD 11
+#define PRESTO_OP_WRITE 12
+#define PRESTO_OP_RELEASE 13
+#define PRESTO_OP_TRUNC 14
+#define PRESTO_OP_SETEXTATTR 15
+#define PRESTO_OP_DELEXTATTR 16
+
+#define PRESTO_LML_DONE 1 /* flag to get first write to do LML */
+#define KML_KOP_MARK 0xffff
+
+struct presto_lml_data {
+ loff_t rec_offset;
+};
+
+struct big_journal_prefix {
+ u32 len;
+ u32 version;
+ u32 pid;
+ u32 uid;
+ u32 fsuid;
+ u32 fsgid;
+ u32 opcode;
+ u32 ngroups;
+ u32 groups[NGROUPS_MAX];
+};
+
+enum kml_opcode {
+ KML_CREATE = 1,
+ KML_MKDIR,
+ KML_UNLINK,
+ KML_RMDIR,
+ KML_CLOSE,
+ KML_SYMLINK,
+ KML_RENAME,
+ KML_SETATTR,
+ KML_LINK,
+ KML_OPEN,
+ KML_MKNOD,
+ KML_ENDMARK = 0xff
+};
+
+struct kml_create {
+ char *path;
+ struct presto_version new_objectv,
+ old_parentv,
+ new_parentv;
+ int mode;
+ int uid;
+ int gid;
+};
+
+struct kml_open {
+};
+
+struct kml_mkdir {
+ char *path;
+ struct presto_version new_objectv,
+ old_parentv,
+ new_parentv;
+ int mode;
+ int uid;
+ int gid;
+};
+
+struct kml_unlink {
+ char *path,
+ *name;
+ struct presto_version old_tgtv,
+ old_parentv,
+ new_parentv;
+};
+
+struct kml_rmdir {
+ char *path,
+ *name;
+ struct presto_version old_tgtv,
+ old_parentv,
+ new_parentv;
+};
+
+struct kml_close {
+ int open_mode,
+ open_uid,
+ open_gid;
+ char *path;
+ struct presto_version new_objectv;
+ __u64 ino;
+ int generation;
+};
+
+struct kml_symlink {
+ char *sourcepath,
+ *targetpath;
+ struct presto_version new_objectv,
+ old_parentv,
+ new_parentv;
+ int uid;
+ int gid;
+};
+
+struct kml_rename {
+ char *sourcepath,
+ *targetpath;
+ struct presto_version old_objectv,
+ new_objectv,
+ old_tgtv,
+ new_tgtv;
+};
+
+struct kml_setattr {
+ char *path;
+ struct presto_version old_objectv;
+ struct iattr iattr;
+};
+
+struct kml_link {
+ char *sourcepath,
+ *targetpath;
+ struct presto_version new_objectv,
+ old_parentv,
+ new_parentv;
+};
+
+struct kml_mknod {
+ char *path;
+ struct presto_version new_objectv,
+ old_parentv,
+ new_parentv;
+ int mode;
+ int uid;
+ int gid;
+ int major;
+ int minor;
+};
+
+/* kml record items for optimizing */
+struct kml_kop_node
+{
+ u32 kml_recno;
+ u32 kml_flag;
+ u32 kml_op;
+ nlink_t i_nlink;
+ u32 i_ino;
+};
+
+struct kml_kop_lnode
+{
+ struct list_head chains;
+ struct kml_kop_node node;
+};
+
+struct kml_endmark {
+ u32 total;
+ struct kml_kop_node *kop;
+};
+
+/* kml_flag */
+#define KML_REC_DELETE 1
+#define KML_REC_EXIST 0
+
+struct kml_optimize {
+ struct list_head kml_chains;
+ u32 kml_flag;
+ u32 kml_op;
+ nlink_t i_nlink;
+ u32 i_ino;
+};
+
+struct kml_rec {
+ /* attribute of this record */
+ int rec_size;
+ int rec_kml_offset;
+
+ struct big_journal_prefix rec_head;
+ union {
+ struct kml_create create;
+ struct kml_open open;
+ struct kml_mkdir mkdir;
+ struct kml_unlink unlink;
+ struct kml_rmdir rmdir;
+ struct kml_close close;
+ struct kml_symlink symlink;
+ struct kml_rename rename;
+ struct kml_setattr setattr;
+ struct kml_mknod mknod;
+ struct kml_link link;
+ struct kml_endmark endmark;
+ } rec_kml;
+ struct journal_suffix rec_tail;
+
+ /* for kml optimize only */
+ struct kml_optimize kml_optimize;
+};
+
+/* kml record items for optimizing */
+extern void kml_kop_init (struct presto_file_set *fset);
+extern void kml_kop_addrec (struct presto_file_set *fset,
+ struct inode *ino, u32 op, u32 flag);
+extern int kml_kop_flush (struct presto_file_set *fset);
+
+/* defined in kml_setup.c */
+extern int kml_init (struct presto_file_set *fset);
+extern int kml_cleanup (struct presto_file_set *fset);
+
+/* defined in kml.c */
+extern int begin_kml_reint (struct file *file, unsigned long arg);
+extern int do_kml_reint (struct file *file, unsigned long arg);
+extern int end_kml_reint (struct file *file, unsigned long arg);
+
+/* kml_utils.c */
+extern char *dlogit (void *tbuf, const void *sbuf, int size);
+extern char * bdup_printf (char *format, ...);
+
+/* defined in kml_decode.c */
+/* printop */
+#define PRINT_KML_PREFIX 0x1
+#define PRINT_KML_SUFFIX 0x2
+#define PRINT_KML_REC 0x4
+#define PRINT_KML_OPTIMIZE 0x8
+#define PRINT_KML_EXIST 0x10
+#define PRINT_KML_DELETE 0x20
+extern void kml_printrec (struct kml_rec *rec, int printop);
+extern int print_allkmlrec (struct list_head *head, int printop);
+extern int delete_kmlrec (struct list_head *head);
+extern int kml_decoderec (char *buf, int pos, int buflen, int *size,
+ struct kml_rec **newrec);
+extern int decode_kmlrec (struct list_head *head, char *kml_buf, int buflen);
+extern void kml_freerec (struct kml_rec *rec);
+
+/* defined in kml_reint.c */
+#define KML_CLOSE_BACKFETCH 1
+extern int kml_reintbuf (struct kml_fsdata *kml_fsdata,
+ char *mtpt, struct kml_rec **rec);
+
+/* defined in kml_setup.c */
+extern int kml_init (struct presto_file_set *fset);
+extern int kml_cleanup (struct presto_file_set *fset);
+
+#endif
+
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)