]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
block: add a bio_init_inline helper
authorChristoph Hellwig <hch@lst.de>
Mon, 8 Sep 2025 10:56:38 +0000 (12:56 +0200)
committerJens Axboe <axboe@kernel.dk>
Tue, 9 Sep 2025 13:31:59 +0000 (07:31 -0600)
Just a simpler wrapper around bio_init for callers that want to
initialize a bio with inline bvecs.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: John Garry <john.g.garry@oracle.com>
Reviewed-by: Yu Kuai <yukuai3@huawei.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
20 files changed:
block/bio.c
block/blk-crypto-fallback.c
block/blk-map.c
drivers/md/bcache/debug.c
drivers/md/bcache/io.c
drivers/md/bcache/journal.c
drivers/md/bcache/movinggc.c
drivers/md/bcache/super.c
drivers/md/bcache/writeback.c
drivers/md/dm-bufio.c
drivers/md/dm-flakey.c
drivers/md/raid1.c
drivers/md/raid10.c
drivers/target/target_core_pscsi.c
fs/bcachefs/btree_io.c
fs/bcachefs/journal.c
fs/bcachefs/journal_io.c
fs/bcachefs/super-io.c
fs/squashfs/block.c
include/linux/bio.h

index 44c43b970387516a2000891145cd4786f934cf95..bd8bf179981a80e708e15c351c1f591b93195202 100644 (file)
@@ -462,7 +462,10 @@ static struct bio *bio_alloc_percpu_cache(struct block_device *bdev,
        cache->nr--;
        put_cpu();
 
-       bio_init(bio, bdev, nr_vecs ? bio->bi_inline_vecs : NULL, nr_vecs, opf);
+       if (nr_vecs)
+               bio_init_inline(bio, bdev, nr_vecs, opf);
+       else
+               bio_init(bio, bdev, NULL, nr_vecs, opf);
        bio->bi_pool = bs;
        return bio;
 }
@@ -578,7 +581,7 @@ struct bio *bio_alloc_bioset(struct block_device *bdev, unsigned short nr_vecs,
 
                bio_init(bio, bdev, bvl, nr_vecs, opf);
        } else if (nr_vecs) {
-               bio_init(bio, bdev, bio->bi_inline_vecs, BIO_INLINE_VECS, opf);
+               bio_init_inline(bio, bdev, BIO_INLINE_VECS, opf);
        } else {
                bio_init(bio, bdev, NULL, 0, opf);
        }
index 005c9157ffb3d4bedadf1cf623535c39ec391eee..dbc2d8784dab936e8839b4f2d64bcdae9463b8d6 100644 (file)
@@ -167,8 +167,7 @@ static struct bio *blk_crypto_fallback_clone_bio(struct bio *bio_src)
        bio = bio_kmalloc(nr_segs, GFP_NOIO);
        if (!bio)
                return NULL;
-       bio_init(bio, bio_src->bi_bdev, bio->bi_inline_vecs, nr_segs,
-                bio_src->bi_opf);
+       bio_init_inline(bio, bio_src->bi_bdev, nr_segs, bio_src->bi_opf);
        if (bio_flagged(bio_src, BIO_REMAPPED))
                bio_set_flag(bio, BIO_REMAPPED);
        bio->bi_ioprio          = bio_src->bi_ioprio;
index 23e5d5ebe59eceeceec0ca050de23b47735eae38..92b7e19b1a1f7e582d47e7d54272863d7d31f469 100644 (file)
@@ -157,7 +157,7 @@ static int bio_copy_user_iov(struct request *rq, struct rq_map_data *map_data,
        bio = bio_kmalloc(nr_pages, gfp_mask);
        if (!bio)
                goto out_bmd;
-       bio_init(bio, NULL, bio->bi_inline_vecs, nr_pages, req_op(rq));
+       bio_init_inline(bio, NULL, nr_pages, req_op(rq));
 
        if (map_data) {
                nr_pages = 1U << map_data->page_order;
@@ -264,7 +264,7 @@ static struct bio *blk_rq_map_bio_alloc(struct request *rq,
                bio = bio_kmalloc(nr_vecs, gfp_mask);
                if (!bio)
                        return NULL;
-               bio_init(bio, NULL, bio->bi_inline_vecs, nr_vecs, req_op(rq));
+               bio_init_inline(bio, NULL, nr_vecs, req_op(rq));
        }
        return bio;
 }
@@ -326,7 +326,7 @@ static struct bio *bio_map_kern(void *data, unsigned int len, enum req_op op,
        bio = bio_kmalloc(nr_vecs, gfp_mask);
        if (!bio)
                return ERR_PTR(-ENOMEM);
-       bio_init(bio, NULL, bio->bi_inline_vecs, nr_vecs, op);
+       bio_init_inline(bio, NULL, nr_vecs, op);
        if (is_vmalloc_addr(data)) {
                bio->bi_private = data;
                if (!bio_add_vmalloc(bio, data, len)) {
@@ -392,7 +392,7 @@ static struct bio *bio_copy_kern(void *data, unsigned int len, enum req_op op,
        bio = bio_kmalloc(nr_pages, gfp_mask);
        if (!bio)
                return ERR_PTR(-ENOMEM);
-       bio_init(bio, NULL, bio->bi_inline_vecs, nr_pages, op);
+       bio_init_inline(bio, NULL, nr_pages, op);
 
        while (len) {
                struct page *page;
index 7510d1c983a5edff59299e16641d60c66860b8de..f327456fc4e064bb26c0ed7be884a3dc78d1478a 100644 (file)
@@ -115,8 +115,7 @@ void bch_data_verify(struct cached_dev *dc, struct bio *bio)
        check = bio_kmalloc(nr_segs, GFP_NOIO);
        if (!check)
                return;
-       bio_init(check, bio->bi_bdev, check->bi_inline_vecs, nr_segs,
-                REQ_OP_READ);
+       bio_init_inline(check, bio->bi_bdev, nr_segs, REQ_OP_READ);
        check->bi_iter.bi_sector = bio->bi_iter.bi_sector;
        check->bi_iter.bi_size = bio->bi_iter.bi_size;
 
index 020712c5203fdd9fa963221d78e30e012536c012..2386d08bf4e4a36537f411acb8ad69fc9a182d40 100644 (file)
@@ -26,8 +26,7 @@ struct bio *bch_bbio_alloc(struct cache_set *c)
        struct bbio *b = mempool_alloc(&c->bio_meta, GFP_NOIO);
        struct bio *bio = &b->bio;
 
-       bio_init(bio, NULL, bio->bi_inline_vecs,
-                meta_bucket_pages(&c->cache->sb), 0);
+       bio_init_inline(bio, NULL, meta_bucket_pages(&c->cache->sb), 0);
 
        return bio;
 }
index 7ff14bd2feb8bba0215b4075f34e8f97940c7bc9..d50eb82ccb4fe40c8f68076af803ae05e68a84f7 100644 (file)
@@ -615,7 +615,7 @@ static void do_journal_discard(struct cache *ca)
 
                atomic_set(&ja->discard_in_flight, DISCARD_IN_FLIGHT);
 
-               bio_init(bio, ca->bdev, bio->bi_inline_vecs, 1, REQ_OP_DISCARD);
+               bio_init_inline(bio, ca->bdev, 1, REQ_OP_DISCARD);
                bio->bi_iter.bi_sector  = bucket_to_sector(ca->set,
                                                ca->sb.d[ja->discard_idx]);
                bio->bi_iter.bi_size    = bucket_bytes(ca);
index 26a6a535ec325f81c129e70a46e21a0ffe322d1f..4fc80c6d5b31dc9807d9b1cf07b0d229f70c6a82 100644 (file)
@@ -79,7 +79,7 @@ static void moving_init(struct moving_io *io)
 {
        struct bio *bio = &io->bio.bio;
 
-       bio_init(bio, NULL, bio->bi_inline_vecs,
+       bio_init_inline(bio, NULL,
                 DIV_ROUND_UP(KEY_SIZE(&io->w->key), PAGE_SECTORS), 0);
        bio_get(bio);
        bio->bi_ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0);
index 1492c8552255cb5e18690e94d7ffd754d9322932..6d250e366412c71169be651b3251afa87d3c3856 100644 (file)
@@ -2236,7 +2236,7 @@ static int cache_alloc(struct cache *ca)
        __module_get(THIS_MODULE);
        kobject_init(&ca->kobj, &bch_cache_ktype);
 
-       bio_init(&ca->journal.bio, NULL, ca->journal.bio.bi_inline_vecs, 8, 0);
+       bio_init_inline(&ca->journal.bio, NULL, 8, 0);
 
        /*
         * When the cache disk is first registered, ca->sb.njournal_buckets
index 302e75f1fc4b63ef5f982e31f7a80f36cc5fe0cb..36dd8f14a6df0820f69492cbb4588f4bae3ceb07 100644 (file)
@@ -331,7 +331,7 @@ static void dirty_init(struct keybuf_key *w)
        struct dirty_io *io = w->private;
        struct bio *bio = &io->bio;
 
-       bio_init(bio, NULL, bio->bi_inline_vecs,
+       bio_init_inline(bio, NULL,
                 DIV_ROUND_UP(KEY_SIZE(&w->key), PAGE_SECTORS), 0);
        if (!io->dc->writeback_percent)
                bio->bi_ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0);
index ff7595caf44039811611cc4a0155c4c10c599085..8f3a23f4b16888ad2de599ce619141a9b158b619 100644 (file)
@@ -1342,7 +1342,7 @@ static void use_bio(struct dm_buffer *b, enum req_op op, sector_t sector,
                use_dmio(b, op, sector, n_sectors, offset, ioprio);
                return;
        }
-       bio_init(bio, b->c->bdev, bio->bi_inline_vecs, 1, op);
+       bio_init_inline(bio, b->c->bdev, 1, op);
        bio->bi_iter.bi_sector = sector;
        bio->bi_end_io = bio_complete;
        bio->bi_private = b;
index cf17fd46e25567ef2387ce72a750fed1ea1900f1..08925aca838c235df3212302841a3e5ba1634440 100644 (file)
@@ -441,7 +441,7 @@ static struct bio *clone_bio(struct dm_target *ti, struct flakey_c *fc, struct b
        if (!clone)
                return NULL;
 
-       bio_init(clone, fc->dev->bdev, clone->bi_inline_vecs, nr_iovecs, bio->bi_opf);
+       bio_init_inline(clone, fc->dev->bdev, nr_iovecs, bio->bi_opf);
 
        clone->bi_iter.bi_sector = flakey_map_sector(ti, bio->bi_iter.bi_sector);
        clone->bi_private = bio;
index 408c263983215e0ae1ba9e96095e07d23988e3ec..bc11aaa38615d966845de08f6a95a0c8cbcadc71 100644 (file)
@@ -167,7 +167,7 @@ static void * r1buf_pool_alloc(gfp_t gfp_flags, void *data)
                bio = bio_kmalloc(RESYNC_PAGES, gfp_flags);
                if (!bio)
                        goto out_free_bio;
-               bio_init(bio, NULL, bio->bi_inline_vecs, RESYNC_PAGES, 0);
+               bio_init_inline(bio, NULL, RESYNC_PAGES, 0);
                r1_bio->bios[j] = bio;
        }
        /*
index b60c30bfb6c794c9fb702724ea1b9cc62c1ec84b..c52ccd12d86bb0d23b86a5948b2fda3305ab0cca 100644 (file)
@@ -163,14 +163,14 @@ static void * r10buf_pool_alloc(gfp_t gfp_flags, void *data)
                bio = bio_kmalloc(RESYNC_PAGES, gfp_flags);
                if (!bio)
                        goto out_free_bio;
-               bio_init(bio, NULL, bio->bi_inline_vecs, RESYNC_PAGES, 0);
+               bio_init_inline(bio, NULL, RESYNC_PAGES, 0);
                r10_bio->devs[j].bio = bio;
                if (!conf->have_replacement)
                        continue;
                bio = bio_kmalloc(RESYNC_PAGES, gfp_flags);
                if (!bio)
                        goto out_free_bio;
-               bio_init(bio, NULL, bio->bi_inline_vecs, RESYNC_PAGES, 0);
+               bio_init_inline(bio, NULL, RESYNC_PAGES, 0);
                r10_bio->devs[j].repl_bio = bio;
        }
        /*
index f991cf759836a556c6e07214d3f57002a44cf293..db4e09042469c5dcf1c53525f158ba6e1b8e3cf5 100644 (file)
@@ -861,7 +861,7 @@ new_bio:
                                bio = bio_kmalloc(nr_vecs, GFP_KERNEL);
                                if (!bio)
                                        goto fail;
-                               bio_init(bio, NULL, bio->bi_inline_vecs, nr_vecs,
+                               bio_init_inline(bio, NULL, nr_vecs,
                                         rw ? REQ_OP_WRITE : REQ_OP_READ);
                                bio->bi_end_io = pscsi_bi_endio;
 
index 590cd29f3e86cb6b3ef4a5b572b5e2152097bce7..e701e6d6e3218838647f7d70b133383dc3b83499 100644 (file)
@@ -2084,7 +2084,7 @@ int bch2_btree_node_scrub(struct btree_trans *trans,
 
        INIT_WORK(&scrub->work, btree_node_scrub_work);
 
-       bio_init(&scrub->bio, ca->disk_sb.bdev, scrub->bio.bi_inline_vecs, vecs, REQ_OP_READ);
+       bio_init_inline(&scrub->bio, ca->disk_sb.bdev, vecs, REQ_OP_READ);
        bch2_bio_map(&scrub->bio, scrub->buf, c->opts.btree_node_size);
        scrub->bio.bi_iter.bi_sector    = pick.ptr.offset;
        scrub->bio.bi_end_io            = btree_node_scrub_endio;
index ddfeb0dafc9d845a2d85af00e50fd9f4a93d0a79..3dbf9faaaa4c6b81e10dbb28d5e57493debc5c07 100644 (file)
@@ -1634,7 +1634,7 @@ int bch2_dev_journal_init(struct bch_dev *ca, struct bch_sb *sb)
 
                ja->bio[i]->ca = ca;
                ja->bio[i]->buf_idx = i;
-               bio_init(&ja->bio[i]->bio, NULL, ja->bio[i]->bio.bi_inline_vecs, nr_bvecs, 0);
+               bio_init_inline(&ja->bio[i]->bio, NULL, nr_bvecs, 0);
        }
 
        ja->buckets = kcalloc(ja->nr, sizeof(u64), GFP_KERNEL);
index 9e028dbcc3d02d3a4838e8601b66b9038bd47c22..ce8888d518c3cd4dbe827d70fcc646d74a6352e1 100644 (file)
@@ -1071,7 +1071,7 @@ reread:
                        bio = bio_kmalloc(nr_bvecs, GFP_KERNEL);
                        if (!bio)
                                return bch_err_throw(c, ENOMEM_journal_read_bucket);
-                       bio_init(bio, ca->disk_sb.bdev, bio->bi_inline_vecs, nr_bvecs, REQ_OP_READ);
+                       bio_init_inline(bio, ca->disk_sb.bdev, nr_bvecs, REQ_OP_READ);
 
                        bio->bi_iter.bi_sector = offset;
                        bch2_bio_map(bio, buf->data, sectors_read << 9);
index 6c2e1d647403f2ebe42a2ea12d2522ae1f028f3d..e3fcffb93d2b5aeb2532ec75acf7d5dbff0ea4d9 100644 (file)
@@ -232,7 +232,7 @@ int bch2_sb_realloc(struct bch_sb_handle *sb, unsigned u64s)
                if (!bio)
                        return -BCH_ERR_ENOMEM_sb_bio_realloc;
 
-               bio_init(bio, NULL, bio->bi_inline_vecs, nr_bvecs, 0);
+               bio_init_inline(bio, NULL, nr_bvecs, 0);
 
                kfree(sb->bio);
                sb->bio = bio;
index b69c294e3ef02c1c2c297028cff70a602e8fff71..a05e3793f93a5ea38cca9069a2bcc471a77d2b69 100644 (file)
@@ -231,7 +231,7 @@ static int squashfs_bio_read(struct super_block *sb, u64 index, int length,
        bio = bio_kmalloc(page_count, GFP_NOIO);
        if (!bio)
                return -ENOMEM;
-       bio_init(bio, sb->s_bdev, bio->bi_inline_vecs, page_count, REQ_OP_READ);
+       bio_init_inline(bio, sb->s_bdev, page_count, REQ_OP_READ);
        bio->bi_iter.bi_sector = block * (msblk->devblksize >> SECTOR_SHIFT);
 
        for (i = 0; i < page_count; ++i) {
index 46ffac5caab788a1419701fb31c0053c2ef24a47..eb7f4fbd8aa93fa385062c0c0238438605ba6af4 100644 (file)
@@ -405,6 +405,11 @@ struct request_queue;
 
 void bio_init(struct bio *bio, struct block_device *bdev, struct bio_vec *table,
              unsigned short max_vecs, blk_opf_t opf);
+static inline void bio_init_inline(struct bio *bio, struct block_device *bdev,
+             unsigned short max_vecs, blk_opf_t opf)
+{
+       bio_init(bio, bdev, bio->bi_inline_vecs, max_vecs, opf);
+}
 extern void bio_uninit(struct bio *);
 void bio_reset(struct bio *bio, struct block_device *bdev, blk_opf_t opf);
 void bio_chain(struct bio *, struct bio *);