aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/btrfs/disk-io.c7
-rw-r--r--fs/btrfs/extent_io.h23
-rw-r--r--fs/btrfs/inode.c7
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
4655static const struct extent_io_ops btree_extent_io_ops = { 4655static 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);
94struct extent_io_ops { 94struct 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
10549static const struct extent_io_ops btrfs_extent_io_ops = { 10549static 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,