|
@@ -2730,6 +2730,9 @@ struct bio *btrfs_bio_clone(struct bio *bio, gfp_t gfp_mask)
|
|
|
btrfs_bio->csum = NULL;
|
|
|
btrfs_bio->csum_allocated = NULL;
|
|
|
btrfs_bio->end_io = NULL;
|
|
|
+ /* FIXME, put this into bio_clone_bioset */
|
|
|
+ if (bio->bi_css)
|
|
|
+ bio_associate_blkcg(new, bio->bi_css);
|
|
|
}
|
|
|
return new;
|
|
|
}
|
|
@@ -2790,6 +2793,7 @@ static int merge_bio(int rw, struct extent_io_tree *tree, struct page *page,
|
|
|
}
|
|
|
|
|
|
static int submit_extent_page(int rw, struct extent_io_tree *tree,
|
|
|
+ struct writeback_control *wbc,
|
|
|
struct page *page, sector_t sector,
|
|
|
size_t size, unsigned long offset,
|
|
|
struct block_device *bdev,
|
|
@@ -2826,6 +2830,8 @@ static int submit_extent_page(int rw, struct extent_io_tree *tree,
|
|
|
}
|
|
|
bio = NULL;
|
|
|
} else {
|
|
|
+ if (wbc)
|
|
|
+ wbc_account_io(wbc, page, page_size);
|
|
|
return 0;
|
|
|
}
|
|
|
}
|
|
@@ -2841,6 +2847,10 @@ static int submit_extent_page(int rw, struct extent_io_tree *tree,
|
|
|
bio_add_page(bio, page, page_size, offset);
|
|
|
bio->bi_end_io = end_io_func;
|
|
|
bio->bi_private = tree;
|
|
|
+ if (wbc) {
|
|
|
+ wbc_init_bio(wbc, bio);
|
|
|
+ wbc_account_io(wbc, page, page_size);
|
|
|
+ }
|
|
|
|
|
|
if (bio_ret)
|
|
|
*bio_ret = bio;
|
|
@@ -3051,7 +3061,7 @@ static int __do_readpage(struct extent_io_tree *tree,
|
|
|
}
|
|
|
|
|
|
pnr -= page->index;
|
|
|
- ret = submit_extent_page(rw, tree, page,
|
|
|
+ ret = submit_extent_page(rw, tree, NULL, page,
|
|
|
sector, disk_io_size, pg_offset,
|
|
|
bdev, bio, pnr,
|
|
|
end_bio_extent_readpage, mirror_num,
|
|
@@ -3446,7 +3456,7 @@ static noinline_for_stack int __extent_writepage_io(struct inode *inode,
|
|
|
page->index, cur, end);
|
|
|
}
|
|
|
|
|
|
- ret = submit_extent_page(write_flags, tree, page,
|
|
|
+ ret = submit_extent_page(write_flags, tree, wbc, page,
|
|
|
sector, iosize, pg_offset,
|
|
|
bdev, &epd->bio, max_nr,
|
|
|
end_bio_extent_writepage,
|
|
@@ -3749,7 +3759,7 @@ static noinline_for_stack int write_one_eb(struct extent_buffer *eb,
|
|
|
|
|
|
clear_page_dirty_for_io(p);
|
|
|
set_page_writeback(p);
|
|
|
- ret = submit_extent_page(rw, tree, p, offset >> 9,
|
|
|
+ ret = submit_extent_page(rw, tree, wbc, p, offset >> 9,
|
|
|
PAGE_CACHE_SIZE, 0, bdev, &epd->bio,
|
|
|
-1, end_bio_extent_buffer_writepage,
|
|
|
0, epd->bio_flags, bio_flags);
|