summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChengming Zhou <zhouchengming@bytedance.com>2023-07-20 14:14:41 +0200
committerJens Axboe <axboe@kernel.dk>2023-07-20 22:02:17 +0200
commit013adcbef165c3eaf73e297b7482290593815ab8 (patch)
treed77db7d2a95838ded238014a282ccac04874e64c
parentblk-mq: delete dead struct blk_mq_hw_ctx->queued field (diff)
downloadlinux-013adcbef165c3eaf73e297b7482290593815ab8.tar.xz
linux-013adcbef165c3eaf73e297b7482290593815ab8.zip
blk-iocost: skip empty flush bio in iocost
The flush bio may have data, may have no data (empty flush), we couldn't calculate cost for empty flush bio. So we'd better just skip it for now. Another side effect is that empty flush bio's bio_end_sector() is 0, cause iocg->cursor reset to 0, may break the cost calculation of other bios. This isn't good enough, since flush bio still consume the device bandwidth, but flush request is special, can be merged randomly in the flush state machine, we don't know how to calculate cost for it for now. Its completion time also has flaws, which may include the pre-flush or post-flush completion time, but I don't know if we need to fix that and how to fix it. Signed-off-by: Chengming Zhou <zhouchengming@bytedance.com> Acked-by: Tejun Heo <tj@kernel.org> Link: https://lore.kernel.org/r/20230720121441.1408522-1-chengming.zhou@linux.dev Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--block/blk-iocost.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/block/blk-iocost.c b/block/blk-iocost.c
index 9dfcf540f400..dd64e2066f01 100644
--- a/block/blk-iocost.c
+++ b/block/blk-iocost.c
@@ -2516,6 +2516,10 @@ static void calc_vtime_cost_builtin(struct bio *bio, struct ioc_gq *iocg,
u64 seek_pages = 0;
u64 cost = 0;
+ /* Can't calculate cost for empty bio */
+ if (!bio->bi_iter.bi_size)
+ goto out;
+
switch (bio_op(bio)) {
case REQ_OP_READ:
coef_seqio = ioc->params.lcoefs[LCOEF_RSEQIO];