int (* fs_get_md)(struct inode *inode, void *md, int size);
ssize_t (* fs_readpage)(struct file *file, char *buf, size_t count,
loff_t *offset);
- void (* fs_delete_inode)(struct inode *inode);
- void (* cl_delete_inode)(struct inode *inode);
int (* fs_journal_data)(struct file *file);
int (* fs_set_last_rcvd)(struct obd_device *obd, __u64 last_rcvd,
- void *handle, fsfilt_cb_t *cb_func);
+ void *handle, fsfilt_cb_t cb_func);
int (* fs_statfs)(struct super_block *sb, struct statfs *sfs);
};
return obd->obd_fsops->fs_readpage(file, buf, count, offset);
}
+static inline int fsfilt_journal_data(struct obd_device *obd, struct file *file)
+{
+ return obd->obd_fsops->fs_journal_data(file);
+}
+
static inline int fsfilt_set_last_rcvd(struct obd_device *obd, __u64 last_rcvd,
- void *handle, fsfilt_cb_t *cb_func)
+ void *handle, fsfilt_cb_t cb_func)
{
return obd->obd_fsops->fs_set_last_rcvd(obd, last_rcvd,handle,cb_func);
}
+static inline int fsfilt_statfs(struct obd_device *obd, struct super_block *fs,
+ struct statfs *sfs)
+{
+ return obd->obd_fsops->fs_statfs(fs, sfs);
+}
+
+extern struct fsfilt_operations *fsfilt_get_ops(char *type);
+extern void fsfilt_put_ops(struct fsfilt_operations *fs_ops);
+
#endif /* __KERNEL__ */
#endif
EXPORT_SYMBOL(fsfilt_register_fs_type);
EXPORT_SYMBOL(fsfilt_unregister_fs_type);
+EXPORT_SYMBOL(fsfilt_get_ops);
+EXPORT_SYMBOL(fsfilt_put_ops);
return rc;
}
-static void fsfilt_ext3_delete_inode(struct inode *inode)
-{
- if (S_ISREG(inode->i_mode)) {
- void *handle = fsfilt_ext3_start(inode, FSFILT_OP_UNLINK);
-
- if (IS_ERR(handle)) {
- CERROR("unable to start transaction");
- EXIT;
- return;
- }
- if (fsfilt_ext3_set_md(inode, handle, NULL, 0))
- CERROR("error clearing objid on %lu\n", inode->i_ino);
-
- if (fsfilt_ext3_fs_ops.cl_delete_inode)
- fsfilt_ext3_fs_ops.cl_delete_inode(inode);
-
- if (fsfilt_ext3_commit(inode, handle))
- CERROR("error closing handle on %lu\n", inode->i_ino);
- } else
- fsfilt_ext3_fs_ops.cl_delete_inode(inode);
-}
-
static void fsfilt_ext3_callback_status(struct journal_callback *jcb, int error)
{
struct fsfilt_cb_data *fcb = (struct fsfilt_cb_data *)jcb;
return rc;
}
-static void fsfilt_extN_delete_inode(struct inode *inode)
-{
- if (S_ISREG(inode->i_mode)) {
- void *handle = fsfilt_extN_start(inode, FSFILT_OP_UNLINK);
-
- if (IS_ERR(handle)) {
- CERROR("unable to start transaction");
- EXIT;
- return;
- }
- if (fsfilt_extN_set_md(inode, handle, NULL, 0))
- CERROR("error clearing objid on %lu\n", inode->i_ino);
-
- if (fsfilt_extN_fs_ops.cl_delete_inode)
- fsfilt_extN_fs_ops.cl_delete_inode(inode);
-
- if (fsfilt_extN_commit(inode, handle))
- CERROR("error closing handle on %lu\n", inode->i_ino);
- } else
- fsfilt_extN_fs_ops.cl_delete_inode(inode);
-}
-
static void fsfilt_extN_cb_func(struct journal_callback *jcb, int error)
{
struct fsfilt_cb_data *fcb = (struct fsfilt_cb_data *)jcb;
fs_set_md: fsfilt_extN_set_md,
fs_get_md: fsfilt_extN_get_md,
fs_readpage: fsfilt_extN_readpage,
- fs_delete_inode: fsfilt_extN_delete_inode,
- cl_delete_inode: clear_inode,
fs_journal_data: fsfilt_extN_journal_data,
fs_set_last_rcvd: fsfilt_extN_set_last_rcvd,
fs_statfs: fsfilt_extN_statfs,