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 __BTRFS_TRANSACTION_H__
20 #define __BTRFS_TRANSACTION_H__
22 #include "kerncompat.h"
25 struct btrfs_trans_handle
{
27 u64 alloc_exclude_start
;
29 unsigned long blocks_reserved
;
30 unsigned long blocks_used
;
31 struct btrfs_block_group_cache
*block_group
;
34 static inline struct btrfs_trans_handle
*
35 btrfs_start_transaction(struct btrfs_root
*root
, int num_blocks
)
37 struct btrfs_fs_info
*fs_info
= root
->fs_info
;
38 struct btrfs_trans_handle
*h
= malloc(sizeof(*h
));
41 BUG_ON(root
->commit_root
);
42 BUG_ON(fs_info
->running_transaction
);
43 fs_info
->running_transaction
= h
;
44 fs_info
->generation
++;
45 h
->transid
= fs_info
->generation
;
46 h
->alloc_exclude_start
= 0;
47 h
->alloc_exclude_nr
= 0;
48 h
->blocks_reserved
= num_blocks
;
50 h
->block_group
= NULL
;
51 root
->last_trans
= h
->transid
;
52 root
->commit_root
= root
->node
;
53 extent_buffer_get(root
->node
);
57 static inline void btrfs_free_transaction(struct btrfs_root
*root
,
58 struct btrfs_trans_handle
*handle
)
60 memset(handle
, 0, sizeof(*handle
));