btrfs_bio_init(bbio, inode, end_io, private);
 
        bio_trim(bio, offset >> 9, size >> 9);
-       bbio->iter = bio->bi_iter;
        return bio;
 }
 
                BUG();
        }
 
+       /* Save the iter for the end_io handler for data reads. */
+       if (bio_op(bio) == REQ_OP_READ && !(bio->bi_opf & REQ_META))
+               bbio->iter = bio->bi_iter;
+
        if (!bioc) {
                /* Single mirror read/write fast path */
                bbio->mirror_num = mirror_num;
 
                        submit = true;
 
                if (submit) {
-                       /* Save the original iter for read repair */
-                       if (bio_op(comp_bio) == REQ_OP_READ)
-                               btrfs_bio(comp_bio)->iter = comp_bio->bi_iter;
-
                        /*
                         * Save the initial offset of this chunk, as there
                         * is no direct correlation between compressed pages and
 
        }
 
        bio_add_page(repair_bio, page, failrec->len, pgoff);
-       repair_bbio->iter = repair_bio->bi_iter;
 
        btrfs_debug(fs_info,
                    "repair read error: submitting new read to mirror %d",
 
                return;
        }
 
-       /* Save the original iter for read repair */
-       btrfs_bio(bio)->iter = bio->bi_iter;
-
        /*
         * Lookup bio sums does extra checks around whether we need to csum or
         * not, which is why we ignore skip_sum here.
        struct btrfs_fs_info *fs_info = inode->root->fs_info;
        blk_status_t ret;
 
-       /* Save the original iter for read repair */
-       if (btrfs_op(bio) == BTRFS_MAP_READ)
-               btrfs_bio(bio)->iter = bio->bi_iter;
-
        if (inode->flags & BTRFS_INODE_NODATASUM)
                goto map;