btrfs: set bbio->file_offset in alloc_new_bio
authorChristoph Hellwig <hch@lst.de>
Mon, 12 Dec 2022 07:37:20 +0000 (08:37 +0100)
committerDavid Sterba <dsterba@suse.com>
Wed, 15 Feb 2023 18:38:55 +0000 (19:38 +0100)
Instead of digging into the bio_vec in submit_one_bio, set file_offset at
bio allocation time from the provided parameter.  This also ensures that
the file_offset is available all the time when building up the bio
payload.

Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent_io.c

index d823994cf62a806bee02d16ff5bbcf349436df92..6a3ec0cecf51556b1ccc00a38dd2f51cfd1877d1 100644 (file)
@@ -140,8 +140,6 @@ static void submit_one_bio(struct btrfs_bio_ctrl *bio_ctrl)
        /* Caller should ensure the bio has at least some range added */
        ASSERT(bio->bi_iter.bi_size);
 
-       btrfs_bio(bio)->file_offset = page_offset(bv->bv_page) + bv->bv_offset;
-
        if (!is_data_inode(inode)) {
                if (btrfs_op(bio) != BTRFS_MAP_WRITE) {
                        /*
@@ -993,6 +991,7 @@ static void alloc_new_bio(struct btrfs_inode *inode,
                bio->bi_iter.bi_sector = disk_bytenr >> SECTOR_SHIFT;
        else
                bio->bi_iter.bi_sector = (disk_bytenr + offset) >> SECTOR_SHIFT;
+       btrfs_bio(bio)->file_offset = file_offset;
        bio_ctrl->bio = bio;
        bio_ctrl->compress_type = compress_type;
        calc_bio_boundaries(bio_ctrl, inode, file_offset);