aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/btrfs/disk-io.c26
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
318static 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
326int btree_readpage_end_io_hook(struct page *page, u64 start, u64 end, 318int 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
496static 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
504static int __btree_submit_bio_hook(struct inode *inode, int rw, struct bio *bio, 512static 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
2041static struct extent_io_ops btree_extent_io_ops = { 2050static 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 */