1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#ifndef __BTRFS_I__
20#define __BTRFS_I__
21
22#include <linux/hash.h>
23#include "extent_map.h"
24#include "extent_io.h"
25#include "ordered-data.h"
26#include "delayed-inode.h"
27
28
29
30
31
32
33
34
35#define BTRFS_INODE_ORDERED_DATA_CLOSE 0
36#define BTRFS_INODE_ORPHAN_META_RESERVED 1
37#define BTRFS_INODE_DUMMY 2
38#define BTRFS_INODE_IN_DEFRAG 3
39#define BTRFS_INODE_DELALLOC_META_RESERVED 4
40#define BTRFS_INODE_HAS_ORPHAN_ITEM 5
41#define BTRFS_INODE_HAS_ASYNC_EXTENT 6
42#define BTRFS_INODE_NEEDS_FULL_SYNC 7
43#define BTRFS_INODE_COPY_EVERYTHING 8
44#define BTRFS_INODE_IN_DELALLOC_LIST 9
45#define BTRFS_INODE_READDIO_NEED_LOCK 10
46#define BTRFS_INODE_HAS_PROPS 11
47
48
49
50
51
52
53
54
55#define BTRFS_INODE_BTREE_ERR 12
56#define BTRFS_INODE_BTREE_LOG1_ERR 13
57#define BTRFS_INODE_BTREE_LOG2_ERR 14
58
59
60struct btrfs_inode {
61
62 struct btrfs_root *root;
63
64
65
66
67 struct btrfs_key location;
68
69
70 spinlock_t lock;
71
72
73 struct extent_map_tree extent_tree;
74
75
76 struct extent_io_tree io_tree;
77
78
79
80
81 struct extent_io_tree io_failure_tree;
82
83
84 struct mutex log_mutex;
85
86
87 struct mutex delalloc_mutex;
88
89
90 struct btrfs_ordered_inode_tree ordered_tree;
91
92
93
94
95
96 struct list_head delalloc_inodes;
97
98
99 struct rb_node rb_node;
100
101 unsigned long runtime_flags;
102
103
104 atomic_t sync_writers;
105
106
107
108
109 u64 generation;
110
111
112
113
114 u64 last_trans;
115
116
117
118
119 u64 logged_trans;
120
121
122
123
124 int last_sub_trans;
125
126
127 int last_log_commit;
128
129
130
131
132 u64 delalloc_bytes;
133
134
135
136
137
138 u64 defrag_bytes;
139
140
141
142
143
144
145 u64 disk_i_size;
146
147
148
149
150
151 u64 index_cnt;
152
153
154 u64 dir_index;
155
156
157
158
159
160
161 u64 last_unlink_trans;
162
163
164
165
166
167 u64 csum_bytes;
168
169
170 u32 flags;
171
172
173
174
175
176
177
178 unsigned outstanding_extents;
179 unsigned reserved_extents;
180
181
182
183
184 unsigned force_compress;
185
186 struct btrfs_delayed_node *delayed_node;
187
188
189 struct timespec i_otime;
190
191 struct inode vfs_inode;
192};
193
194extern unsigned char btrfs_filetype_table[];
195
196static inline struct btrfs_inode *BTRFS_I(struct inode *inode)
197{
198 return container_of(inode, struct btrfs_inode, vfs_inode);
199}
200
201static inline unsigned long btrfs_inode_hash(u64 objectid,
202 const struct btrfs_root *root)
203{
204 u64 h = objectid ^ (root->objectid * GOLDEN_RATIO_PRIME);
205
206#if BITS_PER_LONG == 32
207 h = (h >> 32) ^ (h & 0xffffffff);
208#endif
209
210 return (unsigned long)h;
211}
212
213static inline void btrfs_insert_inode_hash(struct inode *inode)
214{
215 unsigned long h = btrfs_inode_hash(inode->i_ino, BTRFS_I(inode)->root);
216
217 __insert_inode_hash(inode, h);
218}
219
220static inline u64 btrfs_ino(struct inode *inode)
221{
222 u64 ino = BTRFS_I(inode)->location.objectid;
223
224
225
226
227
228 if (!ino || BTRFS_I(inode)->location.type == BTRFS_ROOT_ITEM_KEY)
229 ino = inode->i_ino;
230 return ino;
231}
232
233static inline void btrfs_i_size_write(struct inode *inode, u64 size)
234{
235 i_size_write(inode, size);
236 BTRFS_I(inode)->disk_i_size = size;
237}
238
239static inline bool btrfs_is_free_space_inode(struct inode *inode)
240{
241 struct btrfs_root *root = BTRFS_I(inode)->root;
242
243 if (root == root->fs_info->tree_root &&
244 btrfs_ino(inode) != BTRFS_BTREE_INODE_OBJECTID)
245 return true;
246 if (BTRFS_I(inode)->location.objectid == BTRFS_FREE_INO_OBJECTID)
247 return true;
248 return false;
249}
250
251static inline int btrfs_inode_in_log(struct inode *inode, u64 generation)
252{
253 if (BTRFS_I(inode)->logged_trans == generation &&
254 BTRFS_I(inode)->last_sub_trans <=
255 BTRFS_I(inode)->last_log_commit &&
256 BTRFS_I(inode)->last_sub_trans <=
257 BTRFS_I(inode)->root->last_log_commit) {
258
259
260
261
262
263
264 smp_mb();
265 if (list_empty(&BTRFS_I(inode)->extent_tree.modified_extents))
266 return 1;
267 }
268 return 0;
269}
270
271#define BTRFS_DIO_ORIG_BIO_SUBMITTED 0x1
272
273struct btrfs_dio_private {
274 struct inode *inode;
275 unsigned long flags;
276 u64 logical_offset;
277 u64 disk_bytenr;
278 u64 bytes;
279 void *private;
280
281
282 atomic_t pending_bios;
283
284
285 int errors;
286
287
288 struct bio *orig_bio;
289
290
291 struct bio *dio_bio;
292
293
294
295
296
297 int (*subio_endio)(struct inode *, struct btrfs_io_bio *, int);
298};
299
300
301
302
303
304
305static inline void btrfs_inode_block_unlocked_dio(struct inode *inode)
306{
307 set_bit(BTRFS_INODE_READDIO_NEED_LOCK, &BTRFS_I(inode)->runtime_flags);
308 smp_mb();
309}
310
311static inline void btrfs_inode_resume_unlocked_dio(struct inode *inode)
312{
313 smp_mb__before_atomic();
314 clear_bit(BTRFS_INODE_READDIO_NEED_LOCK,
315 &BTRFS_I(inode)->runtime_flags);
316}
317
318bool btrfs_page_exists_in_range(struct inode *inode, loff_t start, loff_t end);
319
320#endif
321