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

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)