2 * Copyright (C) 2007 Oracle. All rights reserved.
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public
6 * License v2 as published by the Free Software Foundation.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * General Public License for more details.
13 * You should have received a copy of the GNU General Public
14 * License along with this program; if not, write to the
15 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
16 * Boston, MA 021110-1307, USA.
19 #ifndef __TRANSACTION__
20 #define __TRANSACTION__
22 struct btrfs_trans_handle
{
24 u64 alloc_exclude_start
;
26 unsigned long blocks_reserved
;
27 unsigned long blocks_used
;
28 struct btrfs_block_group_cache
*block_group
;
31 static inline struct btrfs_trans_handle
*
32 btrfs_start_transaction(struct btrfs_root
*root
, int num_blocks
)
34 struct btrfs_fs_info
*fs_info
= root
->fs_info
;
35 struct btrfs_trans_handle
*h
= malloc(sizeof(*h
));
37 BUG_ON(root
->commit_root
);
38 BUG_ON(fs_info
->running_transaction
);
39 fs_info
->running_transaction
= h
;
40 fs_info
->generation
++;
41 h
->transid
= fs_info
->generation
;
42 h
->alloc_exclude_start
= 0;
43 h
->alloc_exclude_nr
= 0;
44 h
->blocks_reserved
= num_blocks
;
46 h
->block_group
= NULL
;
47 root
->last_trans
= h
->transid
;
48 root
->commit_root
= root
->node
;
49 extent_buffer_get(root
->node
);
53 static inline void btrfs_free_transaction(struct btrfs_root
*root
,
54 struct btrfs_trans_handle
*handle
)
56 memset(handle
, 0, sizeof(*handle
));