Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
fs
btrfs
transaction.h
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2007 Oracle. All rights reserved.
3
*
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.
7
*
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.
12
*
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.
17
*/
18
19
#ifndef __BTRFS_TRANSACTION__
20
#define __BTRFS_TRANSACTION__
21
#include "
btrfs_inode.h
"
22
#include "
delayed-ref.h
"
23
#include "
ctree.h
"
24
25
struct
btrfs_transaction
{
26
u64
transid
;
27
/*
28
* total writers in this transaction, it must be zero before the
29
* transaction can end
30
*/
31
atomic_t
num_writers
;
32
atomic_t
use_count
;
33
34
unsigned
long
num_joined
;
35
36
spinlock_t
commit_lock
;
37
int
in_commit
;
38
int
commit_done
;
39
int
blocked
;
40
struct
list_head
list
;
41
struct
extent_io_tree
dirty_pages
;
42
unsigned
long
start_time
;
43
wait_queue_head_t
writer_wait
;
44
wait_queue_head_t
commit_wait
;
45
struct
list_head
pending_snapshots
;
46
struct
btrfs_delayed_ref_root
delayed_refs
;
47
int
aborted
;
48
};
49
50
enum
btrfs_trans_type
{
51
TRANS_START
,
52
TRANS_JOIN
,
53
TRANS_USERSPACE
,
54
TRANS_JOIN_NOLOCK
,
55
TRANS_ATTACH
,
56
};
57
58
struct
btrfs_trans_handle
{
59
u64
transid
;
60
u64
bytes_reserved
;
61
u64
qgroup_reserved
;
62
unsigned
long
use_count
;
63
unsigned
long
blocks_reserved
;
64
unsigned
long
blocks_used
;
65
unsigned
long
delayed_ref_updates
;
66
struct
btrfs_transaction
*
transaction
;
67
struct
btrfs_block_rsv
*
block_rsv
;
68
struct
btrfs_block_rsv
*
orig_rsv
;
69
short
aborted
;
70
short
adding_csums
;
71
enum
btrfs_trans_type
type
;
72
/*
73
* this root is only needed to validate that the root passed to
74
* start_transaction is the same as the one passed to end_transaction.
75
* Subvolume quota depends on this
76
*/
77
struct
btrfs_root
*
root
;
78
struct
seq_list
delayed_ref_elem
;
79
struct
list_head
qgroup_ref_list
;
80
struct
list_head
new_bgs
;
81
};
82
83
struct
btrfs_pending_snapshot
{
84
struct
dentry
*
dentry
;
85
struct
btrfs_root
*
root
;
86
struct
btrfs_root
*
snap
;
87
struct
btrfs_qgroup_inherit
*
inherit
;
88
/* block reservation for the operation */
89
struct
btrfs_block_rsv
block_rsv
;
90
/* extra metadata reseration for relocation */
91
int
error
;
92
bool
readonly
;
93
struct
list_head
list
;
94
};
95
96
static
inline
void
btrfs_set_inode_last_trans(
struct
btrfs_trans_handle
*
trans
,
97
struct
inode
*
inode
)
98
{
99
BTRFS_I(inode)->last_trans = trans->
transaction
->transid;
100
BTRFS_I(inode)->last_sub_trans = BTRFS_I(inode)->root->log_transid;
101
BTRFS_I(inode)->last_log_commit = BTRFS_I(inode)->root->last_log_commit;
102
}
103
104
int
btrfs_end_transaction
(
struct
btrfs_trans_handle
*
trans
,
105
struct
btrfs_root
*root);
106
struct
btrfs_trans_handle
*
btrfs_start_transaction
(
struct
btrfs_root
*
root
,
107
int
num_items);
108
struct
btrfs_trans_handle
*
btrfs_start_transaction_noflush
(
109
struct
btrfs_root
*
root
,
int
num_items);
110
struct
btrfs_trans_handle
*
btrfs_join_transaction
(
struct
btrfs_root
*
root
);
111
struct
btrfs_trans_handle
*
btrfs_join_transaction_nolock
(
struct
btrfs_root
*
root
);
112
struct
btrfs_trans_handle
*
btrfs_attach_transaction
(
struct
btrfs_root
*
root
);
113
struct
btrfs_trans_handle
*
btrfs_start_ioctl_transaction
(
struct
btrfs_root
*
root
);
114
int
btrfs_wait_for_commit
(
struct
btrfs_root
*
root
,
u64
transid
);
115
int
btrfs_write_and_wait_transaction
(
struct
btrfs_trans_handle
*
trans
,
116
struct
btrfs_root
*
root
);
117
118
int
btrfs_add_dead_root
(
struct
btrfs_root
*
root
);
119
int
btrfs_defrag_root
(
struct
btrfs_root
*
root
,
int
cacheonly);
120
int
btrfs_clean_old_snapshots
(
struct
btrfs_root
*
root
);
121
int
btrfs_commit_transaction
(
struct
btrfs_trans_handle
*
trans
,
122
struct
btrfs_root
*
root
);
123
int
btrfs_commit_transaction_async
(
struct
btrfs_trans_handle
*
trans
,
124
struct
btrfs_root
*
root
,
125
int
wait_for_unblock);
126
int
btrfs_end_transaction_throttle
(
struct
btrfs_trans_handle
*
trans
,
127
struct
btrfs_root
*
root
);
128
int
btrfs_end_transaction_dmeta
(
struct
btrfs_trans_handle
*
trans
,
129
struct
btrfs_root
*
root
);
130
int
btrfs_should_end_transaction
(
struct
btrfs_trans_handle
*
trans
,
131
struct
btrfs_root
*
root
);
132
void
btrfs_throttle
(
struct
btrfs_root
*
root
);
133
int
btrfs_record_root_in_trans
(
struct
btrfs_trans_handle
*
trans
,
134
struct
btrfs_root
*
root
);
135
int
btrfs_write_and_wait_marked_extents
(
struct
btrfs_root
*
root
,
136
struct
extent_io_tree
*dirty_pages,
int
mark
);
137
int
btrfs_write_marked_extents
(
struct
btrfs_root
*
root
,
138
struct
extent_io_tree
*dirty_pages,
int
mark
);
139
int
btrfs_wait_marked_extents
(
struct
btrfs_root
*
root
,
140
struct
extent_io_tree
*dirty_pages,
int
mark
);
141
int
btrfs_transaction_blocked
(
struct
btrfs_fs_info
*
info
);
142
int
btrfs_transaction_in_commit
(
struct
btrfs_fs_info
*
info
);
143
void
put_transaction
(
struct
btrfs_transaction
*
transaction
);
144
#endif
Generated on Thu Jan 10 2013 14:45:46 for Linux Kernel by
1.8.2