Subversion Repositories shark

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
422 giacomo 1
/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
2
 * vim:expandtab:shiftwidth=8:tabstop=8:
3
 */
4
 
5
#ifndef __FILTER_H_
6
#define __FILTER_H_ 1
7
 
8
#ifdef __KERNEL__
9
 
10
/* cachetype.c */
11
 
12
/*
13
 * it is important that things like inode, super and file operations
14
 * for intermezzo are not defined statically.  If methods are NULL
15
 * the VFS takes special action based on that.  Given that different
16
 * cache types have NULL ops at different slots, we must install opeation
17
 * talbes for InterMezzo with NULL's in the same spot
18
 */
19
 
20
struct filter_ops {
21
        struct super_operations filter_sops;
22
 
23
        struct inode_operations filter_dir_iops;
24
        struct inode_operations filter_file_iops;
25
        struct inode_operations filter_sym_iops;
26
 
27
        struct file_operations filter_dir_fops;
28
        struct file_operations filter_file_fops;
29
        struct file_operations filter_sym_fops;
30
 
31
        struct dentry_operations filter_dentry_ops;
32
};
33
 
34
struct cache_ops {
35
        /* operations on the file store */
36
        struct super_operations *cache_sops;
37
 
38
        struct inode_operations *cache_dir_iops;
39
        struct inode_operations *cache_file_iops;
40
        struct inode_operations *cache_sym_iops;
41
 
42
        struct file_operations *cache_dir_fops;
43
        struct file_operations *cache_file_fops;
44
        struct file_operations *cache_sym_fops;
45
 
46
        struct dentry_operations *cache_dentry_ops;
47
};
48
 
49
 
50
#define FILTER_DID_SUPER_OPS 0x1
51
#define FILTER_DID_INODE_OPS 0x2
52
#define FILTER_DID_FILE_OPS 0x4
53
#define FILTER_DID_DENTRY_OPS 0x8
54
#define FILTER_DID_DEV_OPS 0x10
55
#define FILTER_DID_SYMLINK_OPS 0x20
56
#define FILTER_DID_DIR_OPS 0x40
57
 
58
struct filter_fs {
59
        int o_flags;
60
        struct filter_ops o_fops;
61
        struct cache_ops  o_caops;
62
        struct journal_ops *o_trops;
63
        struct snapshot_ops *o_snops;
64
};
65
 
66
#define FILTER_FS_TYPES 6
67
#define FILTER_FS_EXT2 0
68
#define FILTER_FS_EXT3 1
69
#define FILTER_FS_REISERFS 2
70
#define FILTER_FS_XFS 3
71
#define FILTER_FS_OBDFS 4
72
#define FILTER_FS_TMPFS 5
73
extern struct filter_fs filter_oppar[FILTER_FS_TYPES];
74
 
75
struct filter_fs *filter_get_filter_fs(const char *cache_type);
76
void filter_setup_journal_ops(struct filter_fs *ops, char *cache_type);
77
inline struct super_operations *filter_c2usops(struct filter_fs *cache);
78
inline struct inode_operations *filter_c2ufiops(struct filter_fs *cache);
79
inline struct inode_operations *filter_c2udiops(struct filter_fs *cache);
80
inline struct inode_operations *filter_c2usiops(struct filter_fs *cache);
81
inline struct file_operations *filter_c2uffops(struct filter_fs *cache);
82
inline struct file_operations *filter_c2udfops(struct filter_fs *cache);
83
inline struct file_operations *filter_c2usfops(struct filter_fs *cache);
84
inline struct super_operations *filter_c2csops(struct filter_fs *cache);
85
inline struct inode_operations *filter_c2cfiops(struct filter_fs *cache);
86
inline struct inode_operations *filter_c2cdiops(struct filter_fs *cache);
87
inline struct inode_operations *filter_c2csiops(struct filter_fs *cache);
88
inline struct file_operations *filter_c2cffops(struct filter_fs *cache);
89
inline struct file_operations *filter_c2cdfops(struct filter_fs *cache);
90
inline struct file_operations *filter_c2csfops(struct filter_fs *cache);
91
inline struct dentry_operations *filter_c2cdops(struct filter_fs *cache);
92
inline struct dentry_operations *filter_c2udops(struct filter_fs *cache);
93
 
94
void filter_setup_super_ops(struct filter_fs *cache, struct super_operations *cache_ops, struct super_operations *filter_sops);
95
void filter_setup_dir_ops(struct filter_fs *cache, struct inode *cache_inode, struct inode_operations *filter_iops, struct file_operations *ffops);
96
void filter_setup_file_ops(struct filter_fs *cache, struct inode *cache_inode, struct inode_operations *filter_iops, struct file_operations *filter_op);
97
void filter_setup_symlink_ops(struct filter_fs *cache, struct inode *cache_inode, struct inode_operations *filter_iops, struct file_operations *filter_op);
98
void filter_setup_dentry_ops(struct filter_fs *cache, struct dentry_operations *cache_dop,  struct dentry_operations *filter_dop);
99
 
100
 
101
#define PRESTO_DEBUG
102
#ifdef PRESTO_DEBUG
103
/* debugging masks */
104
#define D_SUPER     1  
105
#define D_INODE     2   /* print entry and exit into procedure */
106
#define D_FILE      4
107
#define D_CACHE     8   /* cache debugging */
108
#define D_MALLOC    16  /* print malloc, de-alloc information */
109
#define D_JOURNAL   32
110
#define D_UPCALL    64  /* up and downcall debugging */
111
#define D_PSDEV    128
112
#define D_PIOCTL   256
113
#define D_SPECIAL  512
114
#define D_TIMING  1024
115
#define D_DOWNCALL 2048
116
 
117
#define FDEBUG(mask, format, a...)                                      \
118
        do {                                                            \
119
                if (filter_debug & mask) {                              \
120
                        printk("(%s,l. %d): ", __FUNCTION__, __LINE__); \
121
                        printk(format, ##a); }                          \
122
        } while (0)
123
 
124
#define FENTRY                                                          \
125
        if(filter_print_entry)                                          \
126
                printk("Process %d entered %s\n", current->pid, __FUNCTION__)
127
 
128
#define FEXIT                                                           \
129
        if(filter_print_entry)                                          \
130
                printk("Process %d leaving %s at %d\n", current->pid,   \
131
                       __FUNCTION__,__LINE__)
132
#endif
133
#endif
134
#endif