block: pass a block_device and opf to bio_alloc
Pass the block_device and operation that we plan to use this bio for to bio_alloc to optimize the assignment. NULL/0 can be passed, both for the passthrough case on a raw request_queue and to temporarily avoid refactoring some nasty code. Also move the gfp_mask argument after the nr_vecs argument for a much more logical calling convention matching what most of the kernel does. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com> Link: https://lore.kernel.org/r/20220124091107.642561-18-hch@lst.de Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
committed by
Jens Axboe
parent
b77c88c210
commit
07888c665b
@ -61,10 +61,9 @@ xfs_rw_bdev(
|
||||
if (is_vmalloc && op == REQ_OP_WRITE)
|
||||
flush_kernel_vmap_range(data, count);
|
||||
|
||||
bio = bio_alloc(GFP_KERNEL, bio_max_vecs(left));
|
||||
bio_set_dev(bio, bdev);
|
||||
bio = bio_alloc(bdev, bio_max_vecs(left), op | REQ_META | REQ_SYNC,
|
||||
GFP_KERNEL);
|
||||
bio->bi_iter.bi_sector = sector;
|
||||
bio->bi_opf = op | REQ_META | REQ_SYNC;
|
||||
|
||||
do {
|
||||
struct page *page = kmem_to_page(data);
|
||||
@ -74,10 +73,9 @@ xfs_rw_bdev(
|
||||
while (bio_add_page(bio, page, len, off) != len) {
|
||||
struct bio *prev = bio;
|
||||
|
||||
bio = bio_alloc(GFP_KERNEL, bio_max_vecs(left));
|
||||
bio_copy_dev(bio, prev);
|
||||
bio = bio_alloc(prev->bi_bdev, bio_max_vecs(left),
|
||||
prev->bi_opf, GFP_KERNEL);
|
||||
bio->bi_iter.bi_sector = bio_end_sector(prev);
|
||||
bio->bi_opf = prev->bi_opf;
|
||||
bio_chain(prev, bio);
|
||||
|
||||
submit_bio(prev);
|
||||
|
@ -1440,12 +1440,10 @@ next_chunk:
|
||||
atomic_inc(&bp->b_io_remaining);
|
||||
nr_pages = bio_max_segs(total_nr_pages);
|
||||
|
||||
bio = bio_alloc(GFP_NOIO, nr_pages);
|
||||
bio_set_dev(bio, bp->b_target->bt_bdev);
|
||||
bio = bio_alloc(bp->b_target->bt_bdev, nr_pages, op, GFP_NOIO);
|
||||
bio->bi_iter.bi_sector = sector;
|
||||
bio->bi_end_io = xfs_buf_bio_end_io;
|
||||
bio->bi_private = bp;
|
||||
bio->bi_opf = op;
|
||||
|
||||
for (; size && nr_pages; nr_pages--, page_index++) {
|
||||
int rbytes, nbytes = PAGE_SIZE - offset;
|
||||
|
Reference in New Issue
Block a user