Blame view

fs/btrfs/extent_io.h 11.7 KB
d1310b2e0   Chris Mason   Btrfs: Split the ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  #ifndef __EXTENTIO__
  #define __EXTENTIO__
  
  #include <linux/rbtree.h>
  
  /* bits for the extent state */
  #define EXTENT_DIRTY 1
  #define EXTENT_WRITEBACK (1 << 1)
  #define EXTENT_UPTODATE (1 << 2)
  #define EXTENT_LOCKED (1 << 3)
  #define EXTENT_NEW (1 << 4)
  #define EXTENT_DELALLOC (1 << 5)
  #define EXTENT_DEFRAG (1 << 6)
  #define EXTENT_DEFRAG_DONE (1 << 7)
  #define EXTENT_BUFFER_FILLED (1 << 8)
8b62b72b2   Chris Mason   Btrfs: Use PagePr...
16
17
  #define EXTENT_BOUNDARY (1 << 9)
  #define EXTENT_NODATASUM (1 << 10)
32c00aff7   Josef Bacik   Btrfs: release de...
18
  #define EXTENT_DO_ACCOUNTING (1 << 11)
0ca1f7ceb   Yan, Zheng   Btrfs: Update met...
19
  #define EXTENT_FIRST_DELALLOC (1 << 12)
1728366ef   Josef Bacik   Btrfs: stop using...
20
  #define EXTENT_NEED_WAIT (1 << 13)
806468f8b   Chris Mason   Merge git://git.j...
21
  #define EXTENT_DAMAGED (1 << 14)
d1310b2e0   Chris Mason   Btrfs: Split the ...
22
  #define EXTENT_IOBITS (EXTENT_LOCKED | EXTENT_WRITEBACK)
0ca1f7ceb   Yan, Zheng   Btrfs: Update met...
23
  #define EXTENT_CTLBITS (EXTENT_DO_ACCOUNTING | EXTENT_FIRST_DELALLOC)
d1310b2e0   Chris Mason   Btrfs: Split the ...
24

261507a02   Li Zefan   btrfs: Allow to a...
25
26
27
28
  /*
   * flags for bio submission. The high bits indicate the compression
   * type for this bio
   */
c8b978188   Chris Mason   Btrfs: Add zlib c...
29
  #define EXTENT_BIO_COMPRESSED 1
261507a02   Li Zefan   btrfs: Allow to a...
30
  #define EXTENT_BIO_FLAG_SHIFT 16
c8b978188   Chris Mason   Btrfs: Add zlib c...
31

b4ce94de9   Chris Mason   Btrfs: Change btr...
32
33
34
  /* these are bit numbers for test/set bit */
  #define EXTENT_BUFFER_UPTODATE 0
  #define EXTENT_BUFFER_BLOCKING 1
b9473439d   Chris Mason   Btrfs: leave btre...
35
  #define EXTENT_BUFFER_DIRTY 2
a826d6dcb   Josef Bacik   Btrfs: check item...
36
  #define EXTENT_BUFFER_CORRUPT 3
ab0fff030   Arne Jansen   btrfs: add READAH...
37
  #define EXTENT_BUFFER_READAHEAD 4	/* this got triggered by readahead */
b4ce94de9   Chris Mason   Btrfs: Change btr...
38

a791e35e1   Chris Mason   Btrfs: cleanup ex...
39
40
41
42
43
44
45
46
  /* these are flags for extent_clear_unlock_delalloc */
  #define EXTENT_CLEAR_UNLOCK_PAGE 0x1
  #define EXTENT_CLEAR_UNLOCK	 0x2
  #define EXTENT_CLEAR_DELALLOC	 0x4
  #define EXTENT_CLEAR_DIRTY	 0x8
  #define EXTENT_SET_WRITEBACK	 0x10
  #define EXTENT_END_WRITEBACK	 0x20
  #define EXTENT_SET_PRIVATE2	 0x40
32c00aff7   Josef Bacik   Btrfs: release de...
47
  #define EXTENT_CLEAR_ACCOUNTING  0x80
a791e35e1   Chris Mason   Btrfs: cleanup ex...
48

d1310b2e0   Chris Mason   Btrfs: Split the ...
49
50
51
52
53
54
  /*
   * page->private values.  Every page that is controlled by the extent
   * map has page->private set to one.
   */
  #define EXTENT_PAGE_PRIVATE 1
  #define EXTENT_PAGE_PRIVATE_FIRST_PAGE 3
70dec8079   Chris Mason   Btrfs: extent_io ...
55
  struct extent_state;
44b8bd7ed   Chris Mason   Btrfs: Create a w...
56
  typedef	int (extent_submit_bio_hook_t)(struct inode *inode, int rw,
c8b978188   Chris Mason   Btrfs: Add zlib c...
57
  				       struct bio *bio, int mirror_num,
eaf25d933   Chris Mason   Btrfs: use async ...
58
  				       unsigned long bio_flags, u64 bio_offset);
d1310b2e0   Chris Mason   Btrfs: Split the ...
59
  struct extent_io_ops {
c8b978188   Chris Mason   Btrfs: Add zlib c...
60
  	int (*fill_delalloc)(struct inode *inode, struct page *locked_page,
771ed689d   Chris Mason   Btrfs: Optimize c...
61
62
  			     u64 start, u64 end, int *page_started,
  			     unsigned long *nr_written);
247e743cb   Chris Mason   Btrfs: Use async ...
63
  	int (*writepage_start_hook)(struct page *page, u64 start, u64 end);
d1310b2e0   Chris Mason   Btrfs: Split the ...
64
  	int (*writepage_io_hook)(struct page *page, u64 start, u64 end);
44b8bd7ed   Chris Mason   Btrfs: Create a w...
65
  	extent_submit_bio_hook_t *submit_bio_hook;
239b14b32   Chris Mason   Btrfs: Bring back...
66
  	int (*merge_bio_hook)(struct page *page, unsigned long offset,
c8b978188   Chris Mason   Btrfs: Add zlib c...
67
68
  			      size_t size, struct bio *bio,
  			      unsigned long bio_flags);
d1310b2e0   Chris Mason   Btrfs: Split the ...
69
  	int (*readpage_io_hook)(struct page *page, u64 start, u64 end);
7e38326f5   Chris Mason   Btrfs: Handle che...
70
  	int (*readpage_io_failed_hook)(struct bio *bio, struct page *page,
32240a913   Jan Schmidt   btrfs: mirror_num...
71
  				       u64 start, u64 end, int failed_mirror,
7e38326f5   Chris Mason   Btrfs: Handle che...
72
  				       struct extent_state *state);
1259ab75c   Chris Mason   Btrfs: Handle wri...
73
74
75
  	int (*writepage_io_failed_hook)(struct bio *bio, struct page *page,
  					u64 start, u64 end,
  				       struct extent_state *state);
70dec8079   Chris Mason   Btrfs: extent_io ...
76
77
  	int (*readpage_end_io_hook)(struct page *page, u64 start, u64 end,
  				    struct extent_state *state);
1259ab75c   Chris Mason   Btrfs: Handle wri...
78
  	int (*writepage_end_io_hook)(struct page *page, u64 start, u64 end,
e6dcd2dc9   Chris Mason   Btrfs: New data=o...
79
  				      struct extent_state *state, int uptodate);
1bf85046e   Jeff Mahoney   btrfs: Make exten...
80
81
82
83
84
85
86
87
88
  	void (*set_bit_hook)(struct inode *inode, struct extent_state *state,
  			     int *bits);
  	void (*clear_bit_hook)(struct inode *inode, struct extent_state *state,
  			       int *bits);
  	void (*merge_extent_hook)(struct inode *inode,
  				  struct extent_state *new,
  				  struct extent_state *other);
  	void (*split_extent_hook)(struct inode *inode,
  				  struct extent_state *orig, u64 split);
01d658f2c   Chris Mason   Btrfs: make sure ...
89
90
  	int (*write_cache_pages_lock_hook)(struct page *page, void *data,
  					   void (*flush_fn)(void *));
d1310b2e0   Chris Mason   Btrfs: Split the ...
91
92
93
94
  };
  
  struct extent_io_tree {
  	struct rb_root state;
19fe0a8b7   Miao Xie   Btrfs: Switch the...
95
  	struct radix_tree_root buffer;
d1310b2e0   Chris Mason   Btrfs: Split the ...
96
97
  	struct address_space *mapping;
  	u64 dirty_bytes;
70dec8079   Chris Mason   Btrfs: extent_io ...
98
  	spinlock_t lock;
6af118ce5   Chris Mason   Btrfs: Index exte...
99
  	spinlock_t buffer_lock;
d1310b2e0   Chris Mason   Btrfs: Split the ...
100
  	struct extent_io_ops *ops;
d1310b2e0   Chris Mason   Btrfs: Split the ...
101
102
103
104
105
  };
  
  struct extent_state {
  	u64 start;
  	u64 end; /* inclusive */
d1310b2e0   Chris Mason   Btrfs: Split the ...
106
  	struct rb_node rb_node;
9ed74f2db   Josef Bacik   Btrfs: proper -EN...
107
108
  
  	/* ADD NEW ELEMENTS AFTER THIS */
70dec8079   Chris Mason   Btrfs: extent_io ...
109
  	struct extent_io_tree *tree;
d1310b2e0   Chris Mason   Btrfs: Split the ...
110
111
112
113
114
115
  	wait_queue_head_t wq;
  	atomic_t refs;
  	unsigned long state;
  
  	/* for use by the FS */
  	u64 private;
2d2ae5479   Chris Mason   Btrfs: Add leak d...
116
  	struct list_head leak_list;
d1310b2e0   Chris Mason   Btrfs: Split the ...
117
118
119
120
121
  };
  
  struct extent_buffer {
  	u64 start;
  	unsigned long len;
d1310b2e0   Chris Mason   Btrfs: Split the ...
122
123
124
  	unsigned long map_start;
  	unsigned long map_len;
  	struct page *first_page;
b4ce94de9   Chris Mason   Btrfs: Change btr...
125
  	unsigned long bflags;
2d2ae5479   Chris Mason   Btrfs: Add leak d...
126
  	struct list_head leak_list;
19fe0a8b7   Miao Xie   Btrfs: Switch the...
127
  	struct rcu_head rcu_head;
9eb9104c6   richard kennedy   btrfs: remove 64b...
128
  	atomic_t refs;
b4ce94de9   Chris Mason   Btrfs: Change btr...
129

bd681513f   Chris Mason   Btrfs: switch the...
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
  	/* count of read lock holders on the extent buffer */
  	atomic_t write_locks;
  	atomic_t read_locks;
  	atomic_t blocking_writers;
  	atomic_t blocking_readers;
  	atomic_t spinning_readers;
  	atomic_t spinning_writers;
  
  	/* protects write locks */
  	rwlock_t lock;
  
  	/* readers use lock_wq while they wait for the write
  	 * lock holders to unlock
  	 */
  	wait_queue_head_t write_lock_wq;
b4ce94de9   Chris Mason   Btrfs: Change btr...
145

bd681513f   Chris Mason   Btrfs: switch the...
146
147
  	/* writers use read_lock_wq while they wait for readers
  	 * to unlock
b4ce94de9   Chris Mason   Btrfs: Change btr...
148
  	 */
bd681513f   Chris Mason   Btrfs: switch the...
149
  	wait_queue_head_t read_lock_wq;
d1310b2e0   Chris Mason   Btrfs: Split the ...
150
  };
261507a02   Li Zefan   btrfs: Allow to a...
151
152
153
154
155
156
157
158
159
160
  static inline void extent_set_compress_type(unsigned long *bio_flags,
  					    int compress_type)
  {
  	*bio_flags |= compress_type << EXTENT_BIO_FLAG_SHIFT;
  }
  
  static inline int extent_compress_type(unsigned long bio_flags)
  {
  	return bio_flags >> EXTENT_BIO_FLAG_SHIFT;
  }
d1310b2e0   Chris Mason   Btrfs: Split the ...
161
162
163
164
  struct extent_map_tree;
  
  typedef struct extent_map *(get_extent_t)(struct inode *inode,
  					  struct page *page,
306e16ce1   David Sterba   btrfs: rename var...
165
  					  size_t pg_offset,
d1310b2e0   Chris Mason   Btrfs: Split the ...
166
167
168
169
  					  u64 start, u64 len,
  					  int create);
  
  void extent_io_tree_init(struct extent_io_tree *tree,
f993c883a   David Sterba   btrfs: drop unuse...
170
  			 struct address_space *mapping);
d1310b2e0   Chris Mason   Btrfs: Split the ...
171
  int try_release_extent_mapping(struct extent_map_tree *map,
70dec8079   Chris Mason   Btrfs: extent_io ...
172
173
  			       struct extent_io_tree *tree, struct page *page,
  			       gfp_t mask);
6af118ce5   Chris Mason   Btrfs: Index exte...
174
  int try_release_extent_buffer(struct extent_io_tree *tree, struct page *page);
7b13b7b11   Chris Mason   Btrfs: Don't drop...
175
176
177
  int try_release_extent_state(struct extent_map_tree *map,
  			     struct extent_io_tree *tree, struct page *page,
  			     gfp_t mask);
d1310b2e0   Chris Mason   Btrfs: Split the ...
178
  int lock_extent(struct extent_io_tree *tree, u64 start, u64 end, gfp_t mask);
1edbb734b   Chris Mason   Btrfs: reduce CPU...
179
  int lock_extent_bits(struct extent_io_tree *tree, u64 start, u64 end,
2c64c53d8   Chris Mason   Btrfs: cache valu...
180
  		     int bits, struct extent_state **cached, gfp_t mask);
d1310b2e0   Chris Mason   Btrfs: Split the ...
181
  int unlock_extent(struct extent_io_tree *tree, u64 start, u64 end, gfp_t mask);
2ac55d41b   Josef Bacik   Btrfs: cache the ...
182
183
  int unlock_extent_cached(struct extent_io_tree *tree, u64 start, u64 end,
  			 struct extent_state **cached, gfp_t mask);
251792013   Josef Bacik   Btrfs: nuke fs wi...
184
185
  int try_lock_extent(struct extent_io_tree *tree, u64 start, u64 end,
  		    gfp_t mask);
d1310b2e0   Chris Mason   Btrfs: Split the ...
186
  int extent_read_full_page(struct extent_io_tree *tree, struct page *page,
8ddc7d9cd   Jan Schmidt   btrfs: add mirror...
187
  			  get_extent_t *get_extent, int mirror_num);
d1310b2e0   Chris Mason   Btrfs: Split the ...
188
189
190
191
192
  int __init extent_io_init(void);
  void extent_io_exit(void);
  
  u64 count_range_bits(struct extent_io_tree *tree,
  		     u64 *start, u64 search_end,
ec29ed5b4   Chris Mason   Btrfs: fix fiemap...
193
  		     u64 max_bytes, unsigned long bits, int contig);
d1310b2e0   Chris Mason   Btrfs: Split the ...
194

4845e44ff   Chris Mason   Btrfs: rework O_D...
195
  void free_extent_state(struct extent_state *state);
d1310b2e0   Chris Mason   Btrfs: Split the ...
196
  int test_range_bit(struct extent_io_tree *tree, u64 start, u64 end,
9655d2982   Chris Mason   Btrfs: use a cach...
197
  		   int bits, int filled, struct extent_state *cached_state);
d1310b2e0   Chris Mason   Btrfs: Split the ...
198
199
  int clear_extent_bits(struct extent_io_tree *tree, u64 start, u64 end,
  		      int bits, gfp_t mask);
e6dcd2dc9   Chris Mason   Btrfs: New data=o...
200
  int clear_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
2c64c53d8   Chris Mason   Btrfs: cache valu...
201
202
  		     int bits, int wake, int delete, struct extent_state **cached,
  		     gfp_t mask);
d1310b2e0   Chris Mason   Btrfs: Split the ...
203
204
  int set_extent_bits(struct extent_io_tree *tree, u64 start, u64 end,
  		    int bits, gfp_t mask);
4845e44ff   Chris Mason   Btrfs: rework O_D...
205
206
207
  int set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
  		   int bits, int exclusive_bits, u64 *failed_start,
  		   struct extent_state **cached_state, gfp_t mask);
d1310b2e0   Chris Mason   Btrfs: Split the ...
208
  int set_extent_uptodate(struct extent_io_tree *tree, u64 start, u64 end,
507903b81   Arne Jansen   btrfs: using cach...
209
  			struct extent_state **cached_state, gfp_t mask);
d1310b2e0   Chris Mason   Btrfs: Split the ...
210
211
212
213
214
215
  int set_extent_new(struct extent_io_tree *tree, u64 start, u64 end,
  		   gfp_t mask);
  int set_extent_dirty(struct extent_io_tree *tree, u64 start, u64 end,
  		     gfp_t mask);
  int clear_extent_dirty(struct extent_io_tree *tree, u64 start, u64 end,
  		       gfp_t mask);
462d6fac8   Josef Bacik   Btrfs: introduce ...
216
217
  int convert_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
  		       int bits, int clear_bits, gfp_t mask);
d1310b2e0   Chris Mason   Btrfs: Split the ...
218
  int set_extent_delalloc(struct extent_io_tree *tree, u64 start, u64 end,
2ac55d41b   Josef Bacik   Btrfs: cache the ...
219
  			struct extent_state **cached_state, gfp_t mask);
d1310b2e0   Chris Mason   Btrfs: Split the ...
220
221
  int find_first_extent_bit(struct extent_io_tree *tree, u64 start,
  			  u64 *start_ret, u64 *end_ret, int bits);
d7fc640e6   Chris Mason   Btrfs: Allocator ...
222
223
  struct extent_state *find_first_extent_bit_state(struct extent_io_tree *tree,
  						 u64 start, int bits);
d1310b2e0   Chris Mason   Btrfs: Split the ...
224
225
226
227
228
  int extent_invalidatepage(struct extent_io_tree *tree,
  			  struct page *page, unsigned long offset);
  int extent_write_full_page(struct extent_io_tree *tree, struct page *page,
  			  get_extent_t *get_extent,
  			  struct writeback_control *wbc);
771ed689d   Chris Mason   Btrfs: Optimize c...
229
230
231
  int extent_write_locked_range(struct extent_io_tree *tree, struct inode *inode,
  			      u64 start, u64 end, get_extent_t *get_extent,
  			      int mode);
d1310b2e0   Chris Mason   Btrfs: Split the ...
232
233
234
235
236
237
238
239
  int extent_writepages(struct extent_io_tree *tree,
  		      struct address_space *mapping,
  		      get_extent_t *get_extent,
  		      struct writeback_control *wbc);
  int extent_readpages(struct extent_io_tree *tree,
  		     struct address_space *mapping,
  		     struct list_head *pages, unsigned nr_pages,
  		     get_extent_t get_extent);
1506fcc81   Yehuda Sadeh   Btrfs: fiemap sup...
240
241
  int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
  		__u64 start, __u64 len, get_extent_t *get_extent);
d1310b2e0   Chris Mason   Btrfs: Split the ...
242
243
244
245
246
247
  int set_state_private(struct extent_io_tree *tree, u64 start, u64 private);
  int get_state_private(struct extent_io_tree *tree, u64 start, u64 *private);
  void set_page_extent_mapped(struct page *page);
  
  struct extent_buffer *alloc_extent_buffer(struct extent_io_tree *tree,
  					  u64 start, unsigned long len,
ba1441926   David Sterba   btrfs: drop gfp p...
248
  					  struct page *page0);
d1310b2e0   Chris Mason   Btrfs: Split the ...
249
  struct extent_buffer *find_extent_buffer(struct extent_io_tree *tree,
f09d1f60e   David Sterba   btrfs: drop gfp p...
250
  					 u64 start, unsigned long len);
d1310b2e0   Chris Mason   Btrfs: Split the ...
251
  void free_extent_buffer(struct extent_buffer *eb);
bb82ab88d   Arne Jansen   btrfs: add an ext...
252
253
254
  #define WAIT_NONE	0
  #define WAIT_COMPLETE	1
  #define WAIT_PAGE_LOCK	2
d1310b2e0   Chris Mason   Btrfs: Split the ...
255
  int read_extent_buffer_pages(struct extent_io_tree *tree,
a86c12c73   Chris Mason   Btrfs: Create lar...
256
  			     struct extent_buffer *eb, u64 start, int wait,
f188591e9   Chris Mason   Btrfs: Retry meta...
257
  			     get_extent_t *get_extent, int mirror_num);
4a54c8c16   Jan Schmidt   btrfs: Moved repa...
258
259
  unsigned long num_extent_pages(u64 start, u64 len);
  struct page *extent_buffer_page(struct extent_buffer *eb, unsigned long i);
d1310b2e0   Chris Mason   Btrfs: Split the ...
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
  
  static inline void extent_buffer_get(struct extent_buffer *eb)
  {
  	atomic_inc(&eb->refs);
  }
  
  int memcmp_extent_buffer(struct extent_buffer *eb, const void *ptrv,
  			  unsigned long start,
  			  unsigned long len);
  void read_extent_buffer(struct extent_buffer *eb, void *dst,
  			unsigned long start,
  			unsigned long len);
  void write_extent_buffer(struct extent_buffer *eb, const void *src,
  			 unsigned long start, unsigned long len);
  void copy_extent_buffer(struct extent_buffer *dst, struct extent_buffer *src,
  			unsigned long dst_offset, unsigned long src_offset,
  			unsigned long len);
  void memcpy_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset,
  			   unsigned long src_offset, unsigned long len);
  void memmove_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset,
  			   unsigned long src_offset, unsigned long len);
  void memset_extent_buffer(struct extent_buffer *eb, char c,
  			  unsigned long start, unsigned long len);
e6dcd2dc9   Chris Mason   Btrfs: New data=o...
283
  int wait_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, int bits);
d1310b2e0   Chris Mason   Btrfs: Split the ...
284
285
286
287
288
289
  int clear_extent_buffer_dirty(struct extent_io_tree *tree,
  			      struct extent_buffer *eb);
  int set_extent_buffer_dirty(struct extent_io_tree *tree,
  			     struct extent_buffer *eb);
  int set_extent_buffer_uptodate(struct extent_io_tree *tree,
  			       struct extent_buffer *eb);
1259ab75c   Chris Mason   Btrfs: Handle wri...
290
  int clear_extent_buffer_uptodate(struct extent_io_tree *tree,
2ac55d41b   Josef Bacik   Btrfs: cache the ...
291
292
  				struct extent_buffer *eb,
  				struct extent_state **cached_state);
d1310b2e0   Chris Mason   Btrfs: Split the ...
293
  int extent_buffer_uptodate(struct extent_io_tree *tree,
2ac55d41b   Josef Bacik   Btrfs: cache the ...
294
295
  			   struct extent_buffer *eb,
  			   struct extent_state *cached_state);
d1310b2e0   Chris Mason   Btrfs: Split the ...
296
  int map_private_extent_buffer(struct extent_buffer *eb, unsigned long offset,
a65917156   Chris Mason   Btrfs: stop using...
297
  		      unsigned long min_len, char **map,
d1310b2e0   Chris Mason   Btrfs: Split the ...
298
  		      unsigned long *map_start,
a65917156   Chris Mason   Btrfs: stop using...
299
  		      unsigned long *map_len);
ce9adaa5a   Chris Mason   Btrfs: Do metadat...
300
301
  int extent_range_uptodate(struct extent_io_tree *tree,
  			  u64 start, u64 end);
c8b978188   Chris Mason   Btrfs: Add zlib c...
302
303
304
  int extent_clear_unlock_delalloc(struct inode *inode,
  				struct extent_io_tree *tree,
  				u64 start, u64 end, struct page *locked_page,
a791e35e1   Chris Mason   Btrfs: cleanup ex...
305
  				unsigned long op);
88f794ede   Miao Xie   btrfs: cleanup du...
306
307
308
  struct bio *
  btrfs_bio_alloc(struct block_device *bdev, u64 first_sector, int nr_vecs,
  		gfp_t gfp_flags);
4a54c8c16   Jan Schmidt   btrfs: Moved repa...
309
310
311
312
313
314
  
  struct btrfs_mapping_tree;
  
  int repair_io_failure(struct btrfs_mapping_tree *map_tree, u64 start,
  			u64 length, u64 logical, struct page *page,
  			int mirror_num);
d1310b2e0   Chris Mason   Btrfs: Split the ...
315
  #endif