When the current bio needs to be throttled because of bps limit, the wait time for the extra bytes may be less than 1 jiffy, tg_within_bps_limit() adds one extra 1 jiffy. However, when taking roundup time into account, the extra 1 jiffy may become not necessary, then bps limit becomes not accurate. This way causes blktests throtl/001 failure in case of CONFIG_HZ_100=y. Fix it by not adding the 1 jiffy in case that the roundup time can cover it. Cc: Tejun Heo <tj@xxxxxxxxxx> Cc: Yu Kuai <yukuai3@xxxxxxxxxx> Signed-off-by: Ming Lei <ming.lei@xxxxxxxxxx> --- block/blk-throttle.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/block/blk-throttle.c b/block/blk-throttle.c index 8d149aff9fd0..8348972c517b 100644 --- a/block/blk-throttle.c +++ b/block/blk-throttle.c @@ -729,14 +729,14 @@ static unsigned long tg_within_bps_limit(struct throtl_grp *tg, struct bio *bio, extra_bytes = tg->bytes_disp[rw] + bio_size - bytes_allowed; jiffy_wait = div64_u64(extra_bytes * HZ, bps_limit); - if (!jiffy_wait) - jiffy_wait = 1; - /* * This wait time is without taking into consideration the rounding * up we did. Add that time also. */ jiffy_wait = jiffy_wait + (jiffy_elapsed_rnd - jiffy_elapsed); + if (!jiffy_wait) + jiffy_wait = 1; + return jiffy_wait; } -- 2.47.0