blob: 0b08208be85358a468f178c3fd8cd0d7cbbd5dda [file] [log] [blame]
Chris Masone089f052007-03-16 16:20:31 -04001#ifndef __TRANSACTION__
2#define __TRANSACTION__
Chris Mason31f3c992007-04-30 15:25:45 -04003#include "btrfs_inode.h"
Chris Masone089f052007-03-16 16:20:31 -04004
Chris Mason79154b12007-03-22 15:59:16 -04005struct btrfs_transaction {
6 u64 transid;
7 unsigned long num_writers;
8 int in_commit;
9 int use_count;
10 int commit_done;
Chris Mason2c90e5d2007-04-02 10:50:19 -040011 int magic;
Chris Mason8fd17792007-04-19 21:01:03 -040012 struct list_head list;
Chris Mason7c4452b2007-04-28 09:29:35 -040013 struct radix_tree_root dirty_pages;
Chris Mason08607c12007-06-08 15:33:54 -040014 unsigned long start_time;
Chris Mason79154b12007-03-22 15:59:16 -040015 wait_queue_head_t writer_wait;
16 wait_queue_head_t commit_wait;
17};
18
Chris Masone089f052007-03-16 16:20:31 -040019struct btrfs_trans_handle {
Chris Mason2c90e5d2007-04-02 10:50:19 -040020 int magic;
Chris Masone089f052007-03-16 16:20:31 -040021 u64 transid;
22 unsigned long blocks_reserved;
23 unsigned long blocks_used;
Chris Mason79154b12007-03-22 15:59:16 -040024 struct btrfs_transaction *transaction;
Chris Mason31f3c992007-04-30 15:25:45 -040025 struct btrfs_block_group_cache *block_group;
Chris Mason2c90e5d2007-04-02 10:50:19 -040026 int magic2;
Chris Masone089f052007-03-16 16:20:31 -040027};
28
Chris Masone089f052007-03-16 16:20:31 -040029
Chris Mason31f3c992007-04-30 15:25:45 -040030static inline void btrfs_set_trans_block_group(struct btrfs_trans_handle *trans,
31 struct inode *inode)
32{
33 trans->block_group = BTRFS_I(inode)->block_group;
34}
35
36static inline void btrfs_update_inode_block_group(struct
37 btrfs_trans_handle *trans,
38 struct inode *inode)
39{
40 BTRFS_I(inode)->block_group = trans->block_group;
41}
42
Chris Mason79154b12007-03-22 15:59:16 -040043int btrfs_end_transaction(struct btrfs_trans_handle *trans,
44 struct btrfs_root *root);
45struct btrfs_trans_handle *btrfs_start_transaction(struct btrfs_root *root,
46 int num_blocks);
47int btrfs_write_and_wait_transaction(struct btrfs_trans_handle *trans,
48 struct btrfs_root *root);
49int btrfs_commit_tree_roots(struct btrfs_trans_handle *trans,
50 struct btrfs_root *root);
Chris Mason08607c12007-06-08 15:33:54 -040051
52void btrfs_transaction_cleaner(struct work_struct *work);
53void btrfs_transaction_flush_work(struct btrfs_root *root);
54void btrfs_transaction_queue_work(struct btrfs_root *root, int delay);
55void btrfs_init_transaction_sys(void);
56void btrfs_exit_transaction_sys(void);
57
Chris Masone089f052007-03-16 16:20:31 -040058#endif