After weight-raise finished, bfqq->wr_coeff is reset to 1 while bfqq->wr_cur_max_time may not be reset. For example, Function bfq_update_bfqq_wr_on_rq_arrival will only reset wr_coeff to 1 if bfqq is created in burst creation. Function bfq_set_budget_timeout will be called when bfqq is selected while it's wr_cur_max_time is set and wr_coeff is 1. Fix this by check wr_coeff > 1 before check wr_cur_max_time. Signed-off-by: Kemeng Shi <shikemeng@xxxxxxxxxx> --- block/bfq-iosched.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c index f4b4ba05f804..20ae52882235 100644 --- a/block/bfq-iosched.c +++ b/block/bfq-iosched.c @@ -3271,7 +3271,8 @@ static void bfq_set_budget_timeout(struct bfq_data *bfqd, { unsigned int timeout_coeff; - if (bfqq->wr_cur_max_time == bfqd->bfq_wr_rt_max_time) + if (bfqq->wr_coeff > 1 && + bfqq->wr_cur_max_time == bfqd->bfq_wr_rt_max_time) timeout_coeff = 1; else timeout_coeff = bfqq->entity.weight / bfqq->entity.orig_weight; -- 2.30.0