Whamcloud - gitweb
Branch: HEAD
[fs/lustre-release.git] / lustre / smfs / smfs_api.h
1 /* SMFS plugin stuff */
2 #define SMFS_PLG_KML    0x0001L
3 #define SMFS_PLG_LRU    0x0004L
4 #define SMFS_PLG_COW    0x0020L
5 #define SMFS_PLG_UNDO   0x0100L
6 #define SMFS_PLG_DUMMY  0x1000L
7 #define SMFS_PLG_ALL    (~0L)
8
9 #define SMFS_SET(flags, mask) (flags |= mask)
10 #define SMFS_IS(flags, mask) (flags & mask)
11 #define SMFS_CLEAR(flags, mask) (flags &= ~mask)
12
13 typedef int (*smfs_plg_hook)(int hook_code, struct inode *,
14                              void *arg, int rc, void * priv);
15 typedef int (*smfs_plg_func)(int help_code, struct super_block *,
16                              void *arg, void * priv);
17
18 struct smfs_plugin {
19         struct list_head plg_list;
20         int              plg_type;
21
22         smfs_plg_hook    plg_pre_op;
23         smfs_plg_hook    plg_post_op;
24         smfs_plg_func    plg_helper;
25         void *           plg_private;
26 };
27
28 #define KML_LOG_NAME    "smfs_kml"
29
30 struct kml_priv {
31         /* llog pack function */
32         int (* pack_fn)(int, char *, struct dentry*,
33                         struct inode *, void *, void *);
34 };
35
36 #define UNDO_LOG_NAME   "smfs_undo"
37 struct undo_priv {
38         struct llog_ctxt *undo_ctxt;
39 };
40
41 #define HOOK_CREATE       1
42 #define HOOK_LOOKUP       2
43 #define HOOK_LINK         3
44 #define HOOK_UNLINK       4
45 #define HOOK_SYMLINK      5
46 #define HOOK_MKDIR        6
47 #define HOOK_RMDIR        7
48 #define HOOK_MKNOD        8
49 #define HOOK_RENAME       9
50 #define HOOK_SETATTR      10
51 #define HOOK_WRITE        11
52 #define HOOK_READDIR      12
53 #define HOOK_F_SETATTR    13
54 #define HOOK_SETXATTR     14
55 #define HOOK_F_SETXATTR   15
56 #define HOOK_MAX          16
57
58 struct hook_msg {
59         struct dentry * dentry;
60
61 };
62
63 struct hook_link_msg {
64         struct dentry * dentry;
65         struct dentry * new_dentry;
66 };
67 struct hook_unlink_msg {
68         struct dentry * dentry;
69         int mode;
70 };
71
72 struct hook_symlink_msg {
73         struct dentry * dentry;
74         int tgt_len;
75         char * symname;
76 };
77
78 struct hook_rename_msg {
79         struct dentry * dentry;
80         struct inode * new_dir;
81         struct dentry * new_dentry;
82 };
83
84 struct hook_readdir_msg {
85         struct dentry * dentry;
86         struct file * filp;
87         void * dirent;
88         filldir_t filldir;
89 };
90
91 struct hook_write_msg {
92         struct dentry * dentry;
93         size_t count;
94         loff_t pos;
95 };
96
97 struct hook_setattr_msg {
98         struct dentry * dentry;
99         struct iattr *attr;
100 };
101
102 struct hook_setxattr_msg {
103         struct inode * inode;
104         char *name;
105         char *buffer;
106         int  buffer_size;
107 };
108
109 void smfs_pre_hook (struct inode*, int, void*);
110 void smfs_post_hook(struct inode*,int, void*, int);
111
112 #define SMFS_PRE_HOOK(inode, op, msg) smfs_pre_hook (inode, op, msg)
113 #define SMFS_POST_HOOK(inode, op, msg, rc) smfs_post_hook(inode, op, msg, rc)
114
115 #define PLG_EXIT        0
116 #define PLG_TRANS_SIZE  1
117 #define PLG_TEST_INODE  2
118 #define PLG_SET_INODE   3
119 #define PLG_START       4
120 #define PLG_STOP        5
121 #define PLG_HELPER_MAX  6
122
123 struct plg_hmsg {
124         __u32 data;
125         __u32 result;        
126 };
127
128 int smfs_helper (struct super_block *, int, void *);
129 #define SMFS_PLG_HELP(sb, op, data)  smfs_helper(sb, op, data)
130
131 int smfs_register_plugin(struct super_block *, struct smfs_plugin *);
132 struct smfs_plugin * smfs_deregister_plugin(struct super_block *, int);
133
134 int smfs_init_dummy(struct super_block *);
135 int smfs_init_kml(struct super_block *);
136 int smfs_init_lru(struct super_block *);
137 int smfs_init_cow(struct super_block *);
138