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 <[email protected]> --- fs/btrfs/extent_io.c | 2 -- fs/btrfs/volumes.c | 3 ++- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index f64d05a..043b7df 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -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; } diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index c70fd0f..4835136 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -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; -- 2.9.4 -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
