linux-old/include/linux/intermezzo_kml.h
<<
>>
Prefs
   1#ifndef __INTERMEZZO_KML_H
   2#define __INTERMEZZO_KML_H
   3
   4#include <linux/version.h>
   5#include <linux/intermezzo_psdev.h>
   6#include <linux/fs.h>
   7#include <linux/intermezzo_journal.h>
   8
   9#define PRESTO_KML_MAJOR_VERSION 0x00010000
  10#define PRESTO_KML_MINOR_VERSION 0x00002001
  11#define PRESTO_OP_NOOP          0
  12#define PRESTO_OP_CREATE        1
  13#define PRESTO_OP_MKDIR         2
  14#define PRESTO_OP_UNLINK        3
  15#define PRESTO_OP_RMDIR         4
  16#define PRESTO_OP_CLOSE         5
  17#define PRESTO_OP_SYMLINK       6
  18#define PRESTO_OP_RENAME        7
  19#define PRESTO_OP_SETATTR       8
  20#define PRESTO_OP_LINK          9
  21#define PRESTO_OP_OPEN          10
  22#define PRESTO_OP_MKNOD         11
  23#define PRESTO_OP_WRITE         12
  24#define PRESTO_OP_RELEASE       13
  25#define PRESTO_OP_TRUNC         14
  26#define PRESTO_OP_SETEXTATTR    15
  27#define PRESTO_OP_DELEXTATTR    16
  28
  29#define PRESTO_LML_DONE         1 /* flag to get first write to do LML */
  30#define KML_KOP_MARK            0xffff
  31
  32struct presto_lml_data {
  33        loff_t   rec_offset;
  34};
  35
  36struct big_journal_prefix {
  37        u32 len;
  38        u32 version; 
  39        u32 pid;
  40        u32 uid;
  41        u32 fsuid;
  42        u32 fsgid;
  43        u32 opcode;
  44        u32 ngroups;
  45        u32 groups[NGROUPS_MAX];
  46};
  47
  48enum kml_opcode {
  49        KML_CREATE = 1,
  50        KML_MKDIR,
  51        KML_UNLINK,
  52        KML_RMDIR,
  53        KML_CLOSE,
  54        KML_SYMLINK,
  55        KML_RENAME,
  56        KML_SETATTR,
  57        KML_LINK,
  58        KML_OPEN,
  59        KML_MKNOD,
  60        KML_ENDMARK = 0xff
  61};
  62
  63struct kml_create {
  64        char                    *path;
  65        struct presto_version   new_objectv, 
  66                                old_parentv, 
  67                                new_parentv;
  68        int                     mode;
  69        int                     uid;
  70        int                     gid;
  71};
  72
  73struct kml_open {
  74};
  75
  76struct kml_mkdir {
  77        char                    *path;
  78        struct presto_version   new_objectv, 
  79                                old_parentv, 
  80                                new_parentv;
  81        int                     mode;
  82        int                     uid;
  83        int                     gid;
  84};
  85
  86struct kml_unlink {
  87        char                    *path,  
  88                                *name;
  89        struct presto_version   old_tgtv, 
  90                                old_parentv, 
  91                                new_parentv;
  92};
  93
  94struct kml_rmdir {
  95        char                    *path, 
  96                                *name;
  97        struct presto_version   old_tgtv, 
  98                                old_parentv, 
  99                                new_parentv;
 100};
 101
 102struct kml_close {
 103        int                     open_mode, 
 104                                open_uid, 
 105                                open_gid;
 106        char                    *path;
 107        struct presto_version   new_objectv;
 108        __u64                   ino;
 109        int                     generation;
 110};
 111
 112struct kml_symlink {
 113        char                    *sourcepath,    
 114                                *targetpath;
 115        struct presto_version   new_objectv, 
 116                                old_parentv, 
 117                                new_parentv;
 118        int                     uid;
 119        int                     gid;
 120};
 121
 122struct kml_rename {
 123        char                    *sourcepath, 
 124                                *targetpath;
 125        struct presto_version   old_objectv, 
 126                                new_objectv, 
 127                                old_tgtv, 
 128                                new_tgtv;
 129};
 130
 131struct kml_setattr {
 132        char                    *path;
 133        struct presto_version   old_objectv;
 134        struct iattr            iattr;
 135};
 136
 137struct kml_link {
 138        char                    *sourcepath,    
 139                                *targetpath;
 140        struct presto_version   new_objectv, 
 141                                old_parentv, 
 142                                new_parentv;
 143};
 144
 145struct kml_mknod {
 146        char                    *path;
 147        struct presto_version   new_objectv, 
 148                                old_parentv, 
 149                                new_parentv;
 150        int                     mode;
 151        int                     uid;
 152        int                     gid;
 153        int                     major;
 154        int                     minor;
 155};
 156
 157/* kml record items for optimizing */
 158struct kml_kop_node
 159{
 160        u32             kml_recno;
 161        u32             kml_flag;
 162        u32             kml_op;
 163        nlink_t         i_nlink;
 164        u32             i_ino;
 165};
 166
 167struct kml_kop_lnode
 168{
 169        struct list_head chains;
 170        struct kml_kop_node node;
 171};
 172
 173struct kml_endmark {
 174        u32                     total;
 175        struct kml_kop_node     *kop;
 176};
 177
 178/* kml_flag */
 179#define  KML_REC_DELETE               1
 180#define  KML_REC_EXIST                0
 181
 182struct kml_optimize {
 183        struct list_head kml_chains;
 184        u32              kml_flag;
 185        u32              kml_op;
 186        nlink_t          i_nlink;
 187        u32              i_ino;
 188};
 189
 190struct kml_rec {
 191        /* attribute of this record */
 192        int                             rec_size;
 193        int                             rec_kml_offset;
 194
 195        struct  big_journal_prefix      rec_head;
 196        union {
 197                struct kml_create       create;
 198                struct kml_open         open;
 199                struct kml_mkdir        mkdir;
 200                struct kml_unlink       unlink;
 201                struct kml_rmdir        rmdir;
 202                struct kml_close        close;
 203                struct kml_symlink      symlink;
 204                struct kml_rename       rename;
 205                struct kml_setattr      setattr;
 206                struct kml_mknod        mknod;
 207                struct kml_link         link;
 208                struct kml_endmark      endmark;
 209        } rec_kml;
 210        struct  journal_suffix          rec_tail;
 211
 212        /* for kml optimize only */
 213        struct  kml_optimize kml_optimize;
 214};
 215
 216/* kml record items for optimizing */
 217extern void kml_kop_init (struct presto_file_set *fset);
 218extern void kml_kop_addrec (struct presto_file_set *fset, 
 219                struct inode *ino, u32 op, u32 flag);
 220extern int  kml_kop_flush (struct presto_file_set *fset);
 221
 222/* defined in kml_setup.c */
 223extern int kml_init (struct presto_file_set *fset);
 224extern int kml_cleanup (struct presto_file_set *fset);
 225
 226/* defined in kml.c */
 227extern int begin_kml_reint (struct file *file, unsigned long arg);
 228extern int do_kml_reint (struct file *file, unsigned long arg);
 229extern int end_kml_reint (struct file *file, unsigned long arg);
 230
 231/* kml_utils.c */
 232extern char *dlogit (void *tbuf, const void *sbuf, int size);
 233extern char * bdup_printf (char *format, ...);
 234
 235/* defined in kml_decode.c */
 236/* printop */
 237#define  PRINT_KML_PREFIX             0x1
 238#define  PRINT_KML_SUFFIX             0x2
 239#define  PRINT_KML_REC                0x4
 240#define  PRINT_KML_OPTIMIZE           0x8
 241#define  PRINT_KML_EXIST              0x10
 242#define  PRINT_KML_DELETE             0x20
 243extern void   kml_printrec (struct kml_rec *rec, int printop);
 244extern int    print_allkmlrec (struct list_head *head, int printop);
 245extern int    delete_kmlrec (struct list_head *head);
 246extern int    kml_decoderec (char *buf, int pos, int buflen, int *size,
 247                             struct kml_rec **newrec);
 248extern int decode_kmlrec (struct list_head *head, char *kml_buf, int buflen);
 249extern void kml_freerec (struct kml_rec *rec);
 250
 251/* defined in kml_reint.c */
 252#define KML_CLOSE_BACKFETCH            1
 253extern int kml_reintbuf (struct  kml_fsdata *kml_fsdata,
 254                        char *mtpt, struct kml_rec **rec);
 255
 256/* defined in kml_setup.c */
 257extern int kml_init (struct presto_file_set *fset);
 258extern int kml_cleanup (struct presto_file_set *fset);
 259
 260#endif
 261
 262
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.