@@ -2689,7 +2689,6 @@ struct bio *btrfs_bio_clone(struct bio *bio)
new = bio_clone_fast(bio, GFP_NOFS, btrfs_bioset);
btrfs_bio = btrfs_io_bio(new);
btrfs_io_bio_init(btrfs_bio);
- btrfs_bio->iter = bio->bi_iter;
return new;
}
@@ -2716,7 +2715,6 @@ struct bio *btrfs_bio_clone_partial(struct bio *orig, int offset, int size)
btrfs_io_bio_init(btrfs_bio);
bio_trim(bio, offset >> 9, size >> 9);
- btrfs_bio->iter = bio->bi_iter;
return bio;
}
@@ -6113,9 +6113,10 @@ static void submit_stripe_bio(struct btrfs_bio *bbio, struct bio *bio,
struct btrfs_fs_info *fs_info = bbio->fs_info;
bio->bi_private = bbio;
- btrfs_io_bio(bio)->stripe_index = dev_nr;
bio->bi_end_io = btrfs_end_bio;
bio->bi_iter.bi_sector = physical >> 9;
+ btrfs_io_bio(bio)->stripe_index = dev_nr;
+ btrfs_io_bio(bio)->iter = bio->bi_iter;
#ifdef DEBUG
{
struct rcu_string *name;
Before this, we only keep a copy of bi_iter for cloned bio so that we can iterate bvec in endio with bio_for_each_segment(), and we iterate normal bio with bio_for_each_segment_all(). However, in the following patches, I'd add retry on write errors where I'd like to process both cloned bio and normal bio in the same way. This keeps a copy of bi_iter in btrfs_io_bio before we submit bio so that in endio we can iter the bio with bio_for_each_segment() only. Signed-off-by: Liu Bo <bo.li.liu@oracle.com> --- fs/btrfs/extent_io.c | 2 -- fs/btrfs/volumes.c | 3 ++- 2 files changed, 2 insertions(+), 3 deletions(-)