Whamcloud - gitweb
- remove non-needed CERROR
[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 void smfs_pre_hook (struct inode*, int, void*);
103 void smfs_post_hook(struct inode*,int, void*, int);
104
105 #define SMFS_PRE_HOOK(inode, op, msg) smfs_pre_hook (inode, op, msg)
106 #define SMFS_POST_HOOK(inode, op, msg, rc) smfs_post_hook(inode, op, msg, rc)
107
108 #define PLG_EXIT        0
109 #define PLG_TRANS_SIZE  1
110 #define PLG_TEST_INODE  2
111 #define PLG_SET_INODE   3
112 #define PLG_START       4
113 #define PLG_STOP        5
114 #define PLG_HELPER_MAX  6
115
116 struct plg_hmsg {
117         __u32 data;
118         __u32 result;        
119 };
120
121 int smfs_helper (struct super_block *, int, void *);
122 #define SMFS_PLG_HELP(sb, op, data)  smfs_helper(sb, op, data)
123
124 int smfs_register_plugin(struct super_block *, struct smfs_plugin *);
125 void * smfs_deregister_plugin(struct super_block *, int);
126
127 int smfs_init_dummy(struct super_block *);
128 int smfs_init_kml(struct super_block *);
129 int smfs_init_lru(struct super_block *);
130 int smfs_init_cow(struct super_block *);
131