mirror of https://github.com/torvalds/linux.git
block: add a bio_init_inline helper
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>
This commit is contained in:
parent
9f7c02e031
commit
70a6f71b1a
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -861,7 +861,7 @@ pscsi_map_sg(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
|
|||
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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -1071,7 +1071,7 @@ static int journal_read_bucket(struct bch_dev *ca,
|
|||
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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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 *);
|
||||
|
|
|
|||
Loading…
Reference in New Issue