btrfs: make btrfs_split_bio work on struct btrfs_bio
authorChristoph Hellwig <hch@lst.de>
Tue, 7 Mar 2023 16:39:45 +0000 (17:39 +0100)
committerDavid Sterba <dsterba@suse.com>
Mon, 17 Apr 2023 16:01:18 +0000 (18:01 +0200)
btrfs_split_bio expects a btrfs_bio as argument and always allocates one.
Type both the orig_bio argument and the return value as struct btrfs_bio
to improve type safety.

Reviewed-by: Anand Jain <anand.jain@oracle.com>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/bio.c

index 527081a..cf09c62 100644 (file)
@@ -61,30 +61,31 @@ struct btrfs_bio *btrfs_bio_alloc(unsigned int nr_vecs, blk_opf_t opf,
        return bbio;
 }
 
-static struct bio *btrfs_split_bio(struct btrfs_fs_info *fs_info,
-                                  struct bio *orig, u64 map_length,
-                                  bool use_append)
+static struct btrfs_bio *btrfs_split_bio(struct btrfs_fs_info *fs_info,
+                                        struct btrfs_bio *orig_bbio,
+                                        u64 map_length, bool use_append)
 {
-       struct btrfs_bio *orig_bbio = btrfs_bio(orig);
+       struct btrfs_bio *bbio;
        struct bio *bio;
 
        if (use_append) {
                unsigned int nr_segs;
 
-               bio = bio_split_rw(orig, &fs_info->limits, &nr_segs,
+               bio = bio_split_rw(&orig_bbio->bio, &fs_info->limits, &nr_segs,
                                   &btrfs_clone_bioset, map_length);
        } else {
-               bio = bio_split(orig, map_length >> SECTOR_SHIFT, GFP_NOFS,
-                               &btrfs_clone_bioset);
+               bio = bio_split(&orig_bbio->bio, map_length >> SECTOR_SHIFT,
+                               GFP_NOFS, &btrfs_clone_bioset);
        }
-       btrfs_bio_init(btrfs_bio(bio), orig_bbio->inode, NULL, orig_bbio);
+       bbio = btrfs_bio(bio);
+       btrfs_bio_init(bbio, orig_bbio->inode, NULL, orig_bbio);
 
-       btrfs_bio(bio)->file_offset = orig_bbio->file_offset;
-       if (!(orig->bi_opf & REQ_BTRFS_ONE_ORDERED))
+       bbio->file_offset = orig_bbio->file_offset;
+       if (!(orig_bbio->bio.bi_opf & REQ_BTRFS_ONE_ORDERED))
                orig_bbio->file_offset += map_length;
 
        atomic_inc(&orig_bbio->pending_ios);
-       return bio;
+       return bbio;
 }
 
 static void btrfs_orig_write_end_io(struct bio *bio);
@@ -633,8 +634,8 @@ static bool btrfs_submit_chunk(struct btrfs_bio *bbio, int mirror_num)
                map_length = min(map_length, fs_info->max_zone_append_size);
 
        if (map_length < length) {
-               bio = btrfs_split_bio(fs_info, bio, map_length, use_append);
-               bbio = btrfs_bio(bio);
+               bbio = btrfs_split_bio(fs_info, bbio, map_length, use_append);
+               bio = &bbio->bio;
        }
 
        /*