diff options
Diffstat (limited to 'fs/btrfs/extent_io.h')
-rw-r--r-- | fs/btrfs/extent_io.h | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h index 7b2f0c3e7929..7604c3001322 100644 --- a/fs/btrfs/extent_io.h +++ b/fs/btrfs/extent_io.h | |||
@@ -17,6 +17,8 @@ | |||
17 | #define EXTENT_NODATASUM (1 << 10) | 17 | #define EXTENT_NODATASUM (1 << 10) |
18 | #define EXTENT_DO_ACCOUNTING (1 << 11) | 18 | #define EXTENT_DO_ACCOUNTING (1 << 11) |
19 | #define EXTENT_FIRST_DELALLOC (1 << 12) | 19 | #define EXTENT_FIRST_DELALLOC (1 << 12) |
20 | #define EXTENT_NEED_WAIT (1 << 13) | ||
21 | #define EXTENT_DAMAGED (1 << 14) | ||
20 | #define EXTENT_IOBITS (EXTENT_LOCKED | EXTENT_WRITEBACK) | 22 | #define EXTENT_IOBITS (EXTENT_LOCKED | EXTENT_WRITEBACK) |
21 | #define EXTENT_CTLBITS (EXTENT_DO_ACCOUNTING | EXTENT_FIRST_DELALLOC) | 23 | #define EXTENT_CTLBITS (EXTENT_DO_ACCOUNTING | EXTENT_FIRST_DELALLOC) |
22 | 24 | ||
@@ -32,6 +34,7 @@ | |||
32 | #define EXTENT_BUFFER_BLOCKING 1 | 34 | #define EXTENT_BUFFER_BLOCKING 1 |
33 | #define EXTENT_BUFFER_DIRTY 2 | 35 | #define EXTENT_BUFFER_DIRTY 2 |
34 | #define EXTENT_BUFFER_CORRUPT 3 | 36 | #define EXTENT_BUFFER_CORRUPT 3 |
37 | #define EXTENT_BUFFER_READAHEAD 4 /* this got triggered by readahead */ | ||
35 | 38 | ||
36 | /* these are flags for extent_clear_unlock_delalloc */ | 39 | /* these are flags for extent_clear_unlock_delalloc */ |
37 | #define EXTENT_CLEAR_UNLOCK_PAGE 0x1 | 40 | #define EXTENT_CLEAR_UNLOCK_PAGE 0x1 |
@@ -67,7 +70,7 @@ struct extent_io_ops { | |||
67 | unsigned long bio_flags); | 70 | unsigned long bio_flags); |
68 | int (*readpage_io_hook)(struct page *page, u64 start, u64 end); | 71 | int (*readpage_io_hook)(struct page *page, u64 start, u64 end); |
69 | int (*readpage_io_failed_hook)(struct bio *bio, struct page *page, | 72 | int (*readpage_io_failed_hook)(struct bio *bio, struct page *page, |
70 | u64 start, u64 end, | 73 | u64 start, u64 end, int failed_mirror, |
71 | struct extent_state *state); | 74 | struct extent_state *state); |
72 | int (*writepage_io_failed_hook)(struct bio *bio, struct page *page, | 75 | int (*writepage_io_failed_hook)(struct bio *bio, struct page *page, |
73 | u64 start, u64 end, | 76 | u64 start, u64 end, |
@@ -85,7 +88,8 @@ struct extent_io_ops { | |||
85 | struct extent_state *other); | 88 | struct extent_state *other); |
86 | void (*split_extent_hook)(struct inode *inode, | 89 | void (*split_extent_hook)(struct inode *inode, |
87 | struct extent_state *orig, u64 split); | 90 | struct extent_state *orig, u64 split); |
88 | int (*write_cache_pages_lock_hook)(struct page *page); | 91 | int (*write_cache_pages_lock_hook)(struct page *page, void *data, |
92 | void (*flush_fn)(void *)); | ||
89 | }; | 93 | }; |
90 | 94 | ||
91 | struct extent_io_tree { | 95 | struct extent_io_tree { |
@@ -185,7 +189,7 @@ int unlock_extent_cached(struct extent_io_tree *tree, u64 start, u64 end, | |||
185 | int try_lock_extent(struct extent_io_tree *tree, u64 start, u64 end, | 189 | int try_lock_extent(struct extent_io_tree *tree, u64 start, u64 end, |
186 | gfp_t mask); | 190 | gfp_t mask); |
187 | int extent_read_full_page(struct extent_io_tree *tree, struct page *page, | 191 | int extent_read_full_page(struct extent_io_tree *tree, struct page *page, |
188 | get_extent_t *get_extent); | 192 | get_extent_t *get_extent, int mirror_num); |
189 | int __init extent_io_init(void); | 193 | int __init extent_io_init(void); |
190 | void extent_io_exit(void); | 194 | void extent_io_exit(void); |
191 | 195 | ||
@@ -214,6 +218,8 @@ int set_extent_dirty(struct extent_io_tree *tree, u64 start, u64 end, | |||
214 | gfp_t mask); | 218 | gfp_t mask); |
215 | int clear_extent_dirty(struct extent_io_tree *tree, u64 start, u64 end, | 219 | int clear_extent_dirty(struct extent_io_tree *tree, u64 start, u64 end, |
216 | gfp_t mask); | 220 | gfp_t mask); |
221 | int convert_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, | ||
222 | int bits, int clear_bits, gfp_t mask); | ||
217 | int set_extent_delalloc(struct extent_io_tree *tree, u64 start, u64 end, | 223 | int set_extent_delalloc(struct extent_io_tree *tree, u64 start, u64 end, |
218 | struct extent_state **cached_state, gfp_t mask); | 224 | struct extent_state **cached_state, gfp_t mask); |
219 | int find_first_extent_bit(struct extent_io_tree *tree, u64 start, | 225 | int find_first_extent_bit(struct extent_io_tree *tree, u64 start, |
@@ -248,9 +254,14 @@ struct extent_buffer *alloc_extent_buffer(struct extent_io_tree *tree, | |||
248 | struct extent_buffer *find_extent_buffer(struct extent_io_tree *tree, | 254 | struct extent_buffer *find_extent_buffer(struct extent_io_tree *tree, |
249 | u64 start, unsigned long len); | 255 | u64 start, unsigned long len); |
250 | void free_extent_buffer(struct extent_buffer *eb); | 256 | void free_extent_buffer(struct extent_buffer *eb); |
257 | #define WAIT_NONE 0 | ||
258 | #define WAIT_COMPLETE 1 | ||
259 | #define WAIT_PAGE_LOCK 2 | ||
251 | int read_extent_buffer_pages(struct extent_io_tree *tree, | 260 | int read_extent_buffer_pages(struct extent_io_tree *tree, |
252 | struct extent_buffer *eb, u64 start, int wait, | 261 | struct extent_buffer *eb, u64 start, int wait, |
253 | get_extent_t *get_extent, int mirror_num); | 262 | get_extent_t *get_extent, int mirror_num); |
263 | unsigned long num_extent_pages(u64 start, u64 len); | ||
264 | struct page *extent_buffer_page(struct extent_buffer *eb, unsigned long i); | ||
254 | 265 | ||
255 | static inline void extent_buffer_get(struct extent_buffer *eb) | 266 | static inline void extent_buffer_get(struct extent_buffer *eb) |
256 | { | 267 | { |
@@ -300,4 +311,10 @@ int extent_clear_unlock_delalloc(struct inode *inode, | |||
300 | struct bio * | 311 | struct bio * |
301 | btrfs_bio_alloc(struct block_device *bdev, u64 first_sector, int nr_vecs, | 312 | btrfs_bio_alloc(struct block_device *bdev, u64 first_sector, int nr_vecs, |
302 | gfp_t gfp_flags); | 313 | gfp_t gfp_flags); |
314 | |||
315 | struct btrfs_mapping_tree; | ||
316 | |||
317 | int repair_io_failure(struct btrfs_mapping_tree *map_tree, u64 start, | ||
318 | u64 length, u64 logical, struct page *page, | ||
319 | int mirror_num); | ||
303 | #endif | 320 | #endif |