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 7b2f0c3e792..feb9be0e23b 100644 --- a/fs/btrfs/extent_io.h +++ b/fs/btrfs/extent_io.h @@ -17,6 +17,8 @@  #define EXTENT_NODATASUM (1 << 10)  #define EXTENT_DO_ACCOUNTING (1 << 11)  #define EXTENT_FIRST_DELALLOC (1 << 12) +#define EXTENT_NEED_WAIT (1 << 13) +#define EXTENT_DAMAGED (1 << 14)  #define EXTENT_IOBITS (EXTENT_LOCKED | EXTENT_WRITEBACK)  #define EXTENT_CTLBITS (EXTENT_DO_ACCOUNTING | EXTENT_FIRST_DELALLOC) @@ -32,6 +34,7 @@  #define EXTENT_BUFFER_BLOCKING 1  #define EXTENT_BUFFER_DIRTY 2  #define EXTENT_BUFFER_CORRUPT 3 +#define EXTENT_BUFFER_READAHEAD 4	/* this got triggered by readahead */  /* these are flags for extent_clear_unlock_delalloc */  #define EXTENT_CLEAR_UNLOCK_PAGE 0x1 @@ -67,7 +70,7 @@ struct extent_io_ops {  			      unsigned long bio_flags);  	int (*readpage_io_hook)(struct page *page, u64 start, u64 end);  	int (*readpage_io_failed_hook)(struct bio *bio, struct page *page, -				       u64 start, u64 end, +				       u64 start, u64 end, u64 failed_mirror,  				       struct extent_state *state);  	int (*writepage_io_failed_hook)(struct bio *bio, struct page *page,  					u64 start, u64 end, @@ -85,7 +88,8 @@ struct extent_io_ops {  				  struct extent_state *other);  	void (*split_extent_hook)(struct inode *inode,  				  struct extent_state *orig, u64 split); -	int (*write_cache_pages_lock_hook)(struct page *page); +	int (*write_cache_pages_lock_hook)(struct page *page, void *data, +					   void (*flush_fn)(void *));  };  struct extent_io_tree { @@ -185,7 +189,7 @@ int unlock_extent_cached(struct extent_io_tree *tree, u64 start, u64 end,  int try_lock_extent(struct extent_io_tree *tree, u64 start, u64 end,  		    gfp_t mask);  int extent_read_full_page(struct extent_io_tree *tree, struct page *page, -			  get_extent_t *get_extent); +			  get_extent_t *get_extent, int mirror_num);  int __init extent_io_init(void);  void extent_io_exit(void); @@ -214,6 +218,8 @@ 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); +int convert_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, +		       int bits, int clear_bits, gfp_t mask);  int set_extent_delalloc(struct extent_io_tree *tree, u64 start, u64 end,  			struct extent_state **cached_state, gfp_t mask);  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,  struct extent_buffer *find_extent_buffer(struct extent_io_tree *tree,  					 u64 start, unsigned long len);  void free_extent_buffer(struct extent_buffer *eb); +#define WAIT_NONE	0 +#define WAIT_COMPLETE	1 +#define WAIT_PAGE_LOCK	2  int read_extent_buffer_pages(struct extent_io_tree *tree,  			     struct extent_buffer *eb, u64 start, int wait,  			     get_extent_t *get_extent, int mirror_num); +unsigned long num_extent_pages(u64 start, u64 len); +struct page *extent_buffer_page(struct extent_buffer *eb, unsigned long i);  static inline void extent_buffer_get(struct extent_buffer *eb)  { @@ -300,4 +311,10 @@ int extent_clear_unlock_delalloc(struct inode *inode,  struct bio *  btrfs_bio_alloc(struct block_device *bdev, u64 first_sector, int nr_vecs,  		gfp_t gfp_flags); + +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);  #endif  |