diff options
Diffstat (limited to 'fs/btrfs/extent_io.c')
-rw-r--r-- | fs/btrfs/extent_io.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index f25a9092b946..582996175b75 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -2642,12 +2642,18 @@ static int __must_check submit_one_bio(int rw, struct bio *bio, int mirror_num, unsigned long bio_flags) { int ret = 0; - struct bio_vec *bvec = bio->bi_io_vec + bio->bi_vcnt - 1; - struct page *page = bvec->bv_page; + struct bio_vec bvec = { 0 }; + struct bvec_iter iter; + struct page *page; struct extent_io_tree *tree = bio->bi_private; u64 start; - start = page_offset(page) + bvec->bv_offset; + bio_for_each_segment(bvec, bio, iter) + if (bio_iter_last(bvec, iter)) + break; + + page = bvec.bv_page; + start = page_offset(page) + bvec.bv_offset; bio->bi_private = NULL; |