262 lines
6.0 KiB
C
262 lines
6.0 KiB
C
#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
|
|
|