diff options
-rw-r--r-- | fs/btrfs/disk-io.c | 7 | ||||
-rw-r--r-- | fs/btrfs/extent_io.h | 23 | ||||
-rw-r--r-- | fs/btrfs/inode.c | 7 |
3 files changed, 26 insertions, 11 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 67d663ab658a..60d4f1b210d7 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
@@ -4653,9 +4653,12 @@ static int btrfs_cleanup_transaction(struct btrfs_fs_info *fs_info) | |||
4653 | } | 4653 | } |
4654 | 4654 | ||
4655 | static const struct extent_io_ops btree_extent_io_ops = { | 4655 | static const struct extent_io_ops btree_extent_io_ops = { |
4656 | .readpage_end_io_hook = btree_readpage_end_io_hook, | 4656 | /* mandatory callbacks */ |
4657 | .readpage_io_failed_hook = btree_io_failed_hook, | ||
4658 | .submit_bio_hook = btree_submit_bio_hook, | 4657 | .submit_bio_hook = btree_submit_bio_hook, |
4658 | .readpage_end_io_hook = btree_readpage_end_io_hook, | ||
4659 | /* note we're sharing with inode.c for the merge bio hook */ | 4659 | /* note we're sharing with inode.c for the merge bio hook */ |
4660 | .merge_bio_hook = btrfs_merge_bio_hook, | 4660 | .merge_bio_hook = btrfs_merge_bio_hook, |
4661 | |||
4662 | /* optional callbacks */ | ||
4663 | .readpage_io_failed_hook = btree_io_failed_hook, | ||
4661 | }; | 4664 | }; |
diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h index 78bb4d76127b..1f8478dc9f8e 100644 --- a/fs/btrfs/extent_io.h +++ b/fs/btrfs/extent_io.h | |||
@@ -92,18 +92,27 @@ typedef int (extent_submit_bio_hook_t)(struct inode *inode, struct bio *bio, | |||
92 | int mirror_num, unsigned long bio_flags, | 92 | int mirror_num, unsigned long bio_flags, |
93 | u64 bio_offset); | 93 | u64 bio_offset); |
94 | struct extent_io_ops { | 94 | struct extent_io_ops { |
95 | int (*fill_delalloc)(struct inode *inode, struct page *locked_page, | 95 | /* |
96 | u64 start, u64 end, int *page_started, | 96 | * The following callbacks must be allways defined, the function |
97 | unsigned long *nr_written); | 97 | * pointer will be called unconditionally. |
98 | int (*writepage_start_hook)(struct page *page, u64 start, u64 end); | 98 | */ |
99 | extent_submit_bio_hook_t *submit_bio_hook; | 99 | extent_submit_bio_hook_t *submit_bio_hook; |
100 | int (*readpage_end_io_hook)(struct btrfs_io_bio *io_bio, u64 phy_offset, | ||
101 | struct page *page, u64 start, u64 end, | ||
102 | int mirror); | ||
100 | int (*merge_bio_hook)(struct page *page, unsigned long offset, | 103 | int (*merge_bio_hook)(struct page *page, unsigned long offset, |
101 | size_t size, struct bio *bio, | 104 | size_t size, struct bio *bio, |
102 | unsigned long bio_flags); | 105 | unsigned long bio_flags); |
106 | |||
107 | /* | ||
108 | * Optional hooks, called if the pointer is not NULL | ||
109 | */ | ||
110 | int (*fill_delalloc)(struct inode *inode, struct page *locked_page, | ||
111 | u64 start, u64 end, int *page_started, | ||
112 | unsigned long *nr_written); | ||
103 | int (*readpage_io_failed_hook)(struct page *page, int failed_mirror); | 113 | int (*readpage_io_failed_hook)(struct page *page, int failed_mirror); |
104 | int (*readpage_end_io_hook)(struct btrfs_io_bio *io_bio, u64 phy_offset, | 114 | |
105 | struct page *page, u64 start, u64 end, | 115 | int (*writepage_start_hook)(struct page *page, u64 start, u64 end); |
106 | int mirror); | ||
107 | void (*writepage_end_io_hook)(struct page *page, u64 start, u64 end, | 116 | void (*writepage_end_io_hook)(struct page *page, u64 start, u64 end, |
108 | struct extent_state *state, int uptodate); | 117 | struct extent_state *state, int uptodate); |
109 | void (*set_bit_hook)(struct inode *inode, struct extent_state *state, | 118 | void (*set_bit_hook)(struct inode *inode, struct extent_state *state, |
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index b904c74f31fd..3b327c8cfb16 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -10547,10 +10547,13 @@ static const struct file_operations btrfs_dir_file_operations = { | |||
10547 | }; | 10547 | }; |
10548 | 10548 | ||
10549 | static const struct extent_io_ops btrfs_extent_io_ops = { | 10549 | static const struct extent_io_ops btrfs_extent_io_ops = { |
10550 | .fill_delalloc = run_delalloc_range, | 10550 | /* mandatory callbacks */ |
10551 | .submit_bio_hook = btrfs_submit_bio_hook, | 10551 | .submit_bio_hook = btrfs_submit_bio_hook, |
10552 | .merge_bio_hook = btrfs_merge_bio_hook, | ||
10553 | .readpage_end_io_hook = btrfs_readpage_end_io_hook, | 10552 | .readpage_end_io_hook = btrfs_readpage_end_io_hook, |
10553 | .merge_bio_hook = btrfs_merge_bio_hook, | ||
10554 | |||
10555 | /* optional callbacks */ | ||
10556 | .fill_delalloc = run_delalloc_range, | ||
10554 | .writepage_end_io_hook = btrfs_writepage_end_io_hook, | 10557 | .writepage_end_io_hook = btrfs_writepage_end_io_hook, |
10555 | .writepage_start_hook = btrfs_writepage_start_hook, | 10558 | .writepage_start_hook = btrfs_writepage_start_hook, |
10556 | .set_bit_hook = btrfs_set_bit_hook, | 10559 | .set_bit_hook = btrfs_set_bit_hook, |