Add block layer API of resubmit_bio_noacct() for handling blk-throttle iops limit correctly. Typical use case is that bio split, and it isn't good to export blk_throtl_charge_bio_split() for drivers, so add new API for serving such purpose. Cc: lining <lining2020x@xxxxxxx> Cc: Tejun Heo <tj@xxxxxxxxxx> Cc: Chunguang Xu <brookxu@xxxxxxxxxxx> Signed-off-by: Ming Lei <ming.lei@xxxxxxxxxx> --- block/blk-core.c | 12 ++++++++++++ block/blk-merge.c | 4 +--- include/linux/blkdev.h | 1 + 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/block/blk-core.c b/block/blk-core.c index fd029c86d6ac..733fec7dc5d6 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -910,6 +910,18 @@ void submit_bio_noacct(struct bio *bio) } EXPORT_SYMBOL(submit_bio_noacct); +/* + * Usually for submitting one bio which has been checked by + * submit_bio_checks already. The typical use case is for handling + * blk-throttle iops limit correctly. + */ +void resubmit_bio_noacct(struct bio *bio) +{ + submit_bio_noacct(bio); + blk_throtl_charge_bio_split(bio); +} +EXPORT_SYMBOL(resubmit_bio_noacct); + /** * submit_bio - submit a bio to the block device layer for I/O * @bio: The &struct bio which describes the I/O diff --git a/block/blk-merge.c b/block/blk-merge.c index 4de34a332c9f..acc786d872e6 100644 --- a/block/blk-merge.c +++ b/block/blk-merge.c @@ -366,10 +366,8 @@ void __blk_queue_split(struct request_queue *q, struct bio **bio, bio_chain(split, *bio); trace_block_split(split, (*bio)->bi_iter.bi_sector); - submit_bio_noacct(*bio); + resubmit_bio_noacct(*bio); *bio = split; - - blk_throtl_charge_bio_split(*bio); } } diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 22746b2d6825..cce2db9fae1f 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -600,6 +600,7 @@ static inline unsigned int blk_queue_depth(struct request_queue *q) extern int blk_register_queue(struct gendisk *disk); extern void blk_unregister_queue(struct gendisk *disk); void submit_bio_noacct(struct bio *bio); +void resubmit_bio_noacct(struct bio *bio); extern int blk_lld_busy(struct request_queue *q); extern void blk_queue_split(struct bio **); -- 2.31.1