3 * Snapfs. (C) 2000 Peter J. Braam
6 #define DEBUG_SUBSYSTEM S_SNAP
8 #include <linux/module.h>
9 #include <linux/kernel.h>
10 #include <linux/string.h>
11 #include <linux/slab.h>
12 #include <linux/stat.h>
13 #include <linux/unistd.h>
14 #include <linux/jbd.h>
15 #include <linux/ext3_jbd.h>
16 #include <linux/ext3_fs.h>
17 #include <linux/snap.h>
19 #include "snapfs_internal.h"
22 #define EXT3_EA_TRANS_BLOCKS EXT3_DATA_TRANS_BLOCKS
25 * must follow the changes of ext3_create_indirect() in fs/ext3/snap.c
27 #define COW_CREDITS (2 * EXT3_EA_TRANS_BLOCKS + 17 + 2 * EXT3_DATA_TRANS_BLOCKS )
29 /* start the filesystem journal operations */
30 static void *snap_e3_trans_start(struct inode *inode, int op)
34 /* XXX needs to be fixed up when we get reiserfs support */
37 jblocks = COW_CREDITS + EXT3_DATA_TRANS_BLOCKS + 3;
40 jblocks = COW_CREDITS + EXT3_DATA_TRANS_BLOCKS;
43 jblocks = COW_CREDITS + EXT3_DELETE_TRANS_BLOCKS;
46 jblocks = COW_CREDITS + EXT3_DATA_TRANS_BLOCKS + 5;
49 jblocks = COW_CREDITS + EXT3_DATA_TRANS_BLOCKS + 4;
52 jblocks = 2 * COW_CREDITS + EXT3_DELETE_TRANS_BLOCKS;
55 jblocks = COW_CREDITS + EXT3_DATA_TRANS_BLOCKS + 3;
58 jblocks = 4 * COW_CREDITS + 2 * EXT3_DATA_TRANS_BLOCKS + 2;
61 CDEBUG(D_INODE, "invalid operation %d for journal\n", op);
65 CDEBUG(D_INODE, "creating journal handle (%d blocks)\n", jblocks);
66 return ext3_journal_start(inode, jblocks);
69 static void snap_e3_trans_commit(void *handle)
74 struct journal_ops snap_ext3_journal_ops = {