diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/disk-io.c | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 535bd0fe1a71..25be96946a2f 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
@@ -315,14 +315,6 @@ out: | |||
315 | return 0; | 315 | return 0; |
316 | } | 316 | } |
317 | 317 | ||
318 | static int btree_writepage_io_hook(struct page *page, u64 start, u64 end) | ||
319 | { | ||
320 | struct btrfs_root *root = BTRFS_I(page->mapping->host)->root; | ||
321 | |||
322 | csum_dirty_buffer(root, page); | ||
323 | return 0; | ||
324 | } | ||
325 | |||
326 | int btree_readpage_end_io_hook(struct page *page, u64 start, u64 end, | 318 | int btree_readpage_end_io_hook(struct page *page, u64 start, u64 end, |
327 | struct extent_state *state) | 319 | struct extent_state *state) |
328 | { | 320 | { |
@@ -501,6 +493,22 @@ int btrfs_wq_submit_bio(struct btrfs_fs_info *fs_info, struct inode *inode, | |||
501 | return 0; | 493 | return 0; |
502 | } | 494 | } |
503 | 495 | ||
496 | static int btree_csum_one_bio(struct bio *bio) | ||
497 | { | ||
498 | struct bio_vec *bvec = bio->bi_io_vec; | ||
499 | int bio_index = 0; | ||
500 | struct btrfs_root *root; | ||
501 | |||
502 | WARN_ON(bio->bi_vcnt <= 0); | ||
503 | while(bio_index < bio->bi_vcnt) { | ||
504 | root = BTRFS_I(bvec->bv_page->mapping->host)->root; | ||
505 | csum_dirty_buffer(root, bvec->bv_page); | ||
506 | bio_index++; | ||
507 | bvec++; | ||
508 | } | ||
509 | return 0; | ||
510 | } | ||
511 | |||
504 | static int __btree_submit_bio_hook(struct inode *inode, int rw, struct bio *bio, | 512 | static int __btree_submit_bio_hook(struct inode *inode, int rw, struct bio *bio, |
505 | int mirror_num) | 513 | int mirror_num) |
506 | { | 514 | { |
@@ -515,6 +523,7 @@ static int __btree_submit_bio_hook(struct inode *inode, int rw, struct bio *bio, | |||
515 | * submission context. Just jump into btrfs_map_bio | 523 | * submission context. Just jump into btrfs_map_bio |
516 | */ | 524 | */ |
517 | if (rw & (1 << BIO_RW)) { | 525 | if (rw & (1 << BIO_RW)) { |
526 | btree_csum_one_bio(bio); | ||
518 | return btrfs_map_bio(BTRFS_I(inode)->root, rw, bio, | 527 | return btrfs_map_bio(BTRFS_I(inode)->root, rw, bio, |
519 | mirror_num, 1); | 528 | mirror_num, 1); |
520 | } | 529 | } |
@@ -2040,7 +2049,6 @@ out: | |||
2040 | 2049 | ||
2041 | static struct extent_io_ops btree_extent_io_ops = { | 2050 | static struct extent_io_ops btree_extent_io_ops = { |
2042 | .write_cache_pages_lock_hook = btree_lock_page_hook, | 2051 | .write_cache_pages_lock_hook = btree_lock_page_hook, |
2043 | .writepage_io_hook = btree_writepage_io_hook, | ||
2044 | .readpage_end_io_hook = btree_readpage_end_io_hook, | 2052 | .readpage_end_io_hook = btree_readpage_end_io_hook, |
2045 | .submit_bio_hook = btree_submit_bio_hook, | 2053 | .submit_bio_hook = btree_submit_bio_hook, |
2046 | /* note we're sharing with inode.c for the merge bio hook */ | 2054 | /* note we're sharing with inode.c for the merge bio hook */ |