Rename iter to saved_iter and move it next to the repair internals and nothing outside of bio.c should be touching it. Signed-off-by: Christoph Hellwig <hch@xxxxxx> --- fs/btrfs/bio.c | 12 ++++++------ fs/btrfs/bio.h | 7 +++++-- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/fs/btrfs/bio.c b/fs/btrfs/bio.c index e32a2dac97c541..f1566919fdb969 100644 --- a/fs/btrfs/bio.c +++ b/fs/btrfs/bio.c @@ -109,7 +109,7 @@ static void btrfs_end_repair_bio(struct btrfs_bio *repair_bbio, if (repair_bbio->bio.bi_status || !btrfs_data_csum_ok(repair_bbio, dev, 0, bv)) { bio_reset(&repair_bbio->bio, NULL, REQ_OP_READ); - repair_bbio->bio.bi_iter = repair_bbio->iter; + repair_bbio->bio.bi_iter = repair_bbio->saved_iter; mirror = next_repair_mirror(fbio, mirror); if (mirror == fbio->bbio->mirror_num) { @@ -126,7 +126,7 @@ static void btrfs_end_repair_bio(struct btrfs_bio *repair_bbio, mirror = prev_repair_mirror(fbio, mirror); btrfs_repair_io_failure(fs_info, btrfs_ino(inode), repair_bbio->file_offset, fs_info->sectorsize, - repair_bbio->iter.bi_sector << + repair_bbio->saved_iter.bi_sector << SECTOR_SHIFT, bv->bv_page, bv->bv_offset, mirror); } while (mirror != fbio->bbio->mirror_num); @@ -152,7 +152,7 @@ static struct btrfs_failed_bio *repair_one_sector(struct btrfs_bio *failed_bbio, struct btrfs_inode *inode = failed_bbio->inode; struct btrfs_fs_info *fs_info = inode->root->fs_info; const u32 sectorsize = fs_info->sectorsize; - const u64 logical = failed_bbio->iter.bi_sector << SECTOR_SHIFT; + const u64 logical = failed_bbio->saved_iter.bi_sector << SECTOR_SHIFT; struct btrfs_bio *repair_bbio; struct bio *repair_bio; int num_copies; @@ -179,7 +179,7 @@ static struct btrfs_failed_bio *repair_one_sector(struct btrfs_bio *failed_bbio, repair_bio = bio_alloc_bioset(NULL, 1, REQ_OP_READ, GFP_NOFS, &btrfs_repair_bioset); - repair_bio->bi_iter.bi_sector = failed_bbio->iter.bi_sector; + repair_bio->bi_iter.bi_sector = failed_bbio->saved_iter.bi_sector; bio_add_page(repair_bio, bv->bv_page, bv->bv_len, bv->bv_offset); repair_bbio = btrfs_bio(repair_bio); @@ -198,7 +198,7 @@ static void btrfs_check_read_bio(struct btrfs_bio *bbio, struct btrfs_inode *inode = bbio->inode; struct btrfs_fs_info *fs_info = inode->root->fs_info; unsigned int sectorsize = fs_info->sectorsize; - struct bvec_iter *iter = &bbio->iter; + struct bvec_iter *iter = &bbio->saved_iter; blk_status_t status = bbio->bio.bi_status; struct btrfs_failed_bio *fbio = NULL; u32 offset = 0; @@ -435,7 +435,7 @@ void btrfs_submit_bio(struct btrfs_fs_info *fs_info, struct bio *bio, int mirror * data reads. */ if (bio_op(bio) == REQ_OP_READ && !(bio->bi_opf & REQ_META)) { - bbio->iter = bio->bi_iter; + bbio->saved_iter = bio->bi_iter; ret = btrfs_lookup_bio_sums(bbio); if (ret) goto fail; diff --git a/fs/btrfs/bio.h b/fs/btrfs/bio.h index 61a791cf5360f3..c232148348dfe3 100644 --- a/fs/btrfs/bio.h +++ b/fs/btrfs/bio.h @@ -39,17 +39,20 @@ struct btrfs_bio { * it's a metadata bio. */ unsigned int is_metadata:1; - struct bvec_iter iter; /* Inode and offset into it that this I/O operates on. */ struct btrfs_inode *inode; u64 file_offset; union { - /* For data checksum verification. */ + /* + * Data checksumming and original I/O information for internal + * use in the btrfs_submit_bio machinery. + */ struct { u8 *csum; u8 csum_inline[BTRFS_BIO_INLINE_CSUM_SIZE]; + struct bvec_iter saved_iter; }; /* For metadata parentness verification. */ -- 2.39.0