Message ID | 20230219104309.1511562-8-shikemeng@huaweicloud.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Some bugfix and cleanup patches for bfq | expand |
diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c index b32bae5259d5..5610a7dcacdf 100644 --- a/block/bfq-iosched.c +++ b/block/bfq-iosched.c @@ -3297,7 +3297,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;
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 along with check wr_cur_max_time check like other code do. Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com> --- block/bfq-iosched.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)