block: pass a block_device and opf to bio_init
Pass the block_device that we plan to use this bio for and the operation to bio_init to optimize the assignment. A NULL block_device can be passed, both for the passthrough case on a raw request_queue and to temporarily avoid refactoring some nasty code. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com> Link: https://lore.kernel.org/r/20220124091107.642561-19-hch@lst.de Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
committed by
Jens Axboe
parent
07888c665b
commit
49add4966d
@ -36,9 +36,7 @@ xfs_flush_bdev_async(
|
||||
return;
|
||||
}
|
||||
|
||||
bio_init(bio, NULL, 0);
|
||||
bio_set_dev(bio, bdev);
|
||||
bio->bi_opf = REQ_OP_WRITE | REQ_PREFLUSH | REQ_SYNC;
|
||||
bio_init(bio, bdev, NULL, 0, REQ_OP_WRITE | REQ_PREFLUSH | REQ_SYNC);
|
||||
bio->bi_private = done;
|
||||
bio->bi_end_io = xfs_flush_bdev_async_endio;
|
||||
|
||||
|
@ -1883,19 +1883,19 @@ xlog_write_iclog(
|
||||
return;
|
||||
}
|
||||
|
||||
bio_init(&iclog->ic_bio, iclog->ic_bvec, howmany(count, PAGE_SIZE));
|
||||
bio_set_dev(&iclog->ic_bio, log->l_targ->bt_bdev);
|
||||
iclog->ic_bio.bi_iter.bi_sector = log->l_logBBstart + bno;
|
||||
iclog->ic_bio.bi_end_io = xlog_bio_end_io;
|
||||
iclog->ic_bio.bi_private = iclog;
|
||||
|
||||
/*
|
||||
* We use REQ_SYNC | REQ_IDLE here to tell the block layer the are more
|
||||
* IOs coming immediately after this one. This prevents the block layer
|
||||
* writeback throttle from throttling log writes behind background
|
||||
* metadata writeback and causing priority inversions.
|
||||
*/
|
||||
iclog->ic_bio.bi_opf = REQ_OP_WRITE | REQ_META | REQ_SYNC | REQ_IDLE;
|
||||
bio_init(&iclog->ic_bio, log->l_targ->bt_bdev, iclog->ic_bvec,
|
||||
howmany(count, PAGE_SIZE),
|
||||
REQ_OP_WRITE | REQ_META | REQ_SYNC | REQ_IDLE);
|
||||
iclog->ic_bio.bi_iter.bi_sector = log->l_logBBstart + bno;
|
||||
iclog->ic_bio.bi_end_io = xlog_bio_end_io;
|
||||
iclog->ic_bio.bi_private = iclog;
|
||||
|
||||
if (iclog->ic_flags & XLOG_ICL_NEED_FLUSH) {
|
||||
iclog->ic_bio.bi_opf |= REQ_PREFLUSH;
|
||||
/*
|
||||
|
Reference in New Issue
Block a user