mirror of
https://github.com/torvalds/linux.git
synced 2024-12-29 06:12:08 +00:00
block, bfq: make sure queue budgets are not below service received
With some unlucky sequences of events, the function bfq_updated_next_req updates the current budget of a bfq_queue to a lower value than the service received by the queue using such a budget. Unfortunately, if this happens, then the return value of the function bfq_bfqq_budget_left becomes inconsistent. This commit solves this problem by lower-bounding the budget computed in bfq_updated_next_req to the service currently charged to the queue. Signed-off-by: Paolo Valente <paolo.valente@linaro.org> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
218cb897be
commit
f3218ad8c6
@ -907,8 +907,10 @@ static void bfq_updated_next_req(struct bfq_data *bfqd,
|
||||
*/
|
||||
return;
|
||||
|
||||
new_budget = max_t(unsigned long, bfqq->max_budget,
|
||||
bfq_serv_to_charge(next_rq, bfqq));
|
||||
new_budget = max_t(unsigned long,
|
||||
max_t(unsigned long, bfqq->max_budget,
|
||||
bfq_serv_to_charge(next_rq, bfqq)),
|
||||
entity->service);
|
||||
if (entity->budget != new_budget) {
|
||||
entity->budget = new_budget;
|
||||
bfq_log_bfqq(bfqd, bfqq, "updated next rq: new budget %lu",
|
||||
|
Loading…
Reference in New Issue
Block a user