mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 08:03:01 +09:00
block, bfq: fix service being wrongly set to zero in case of preemption
If - a bfq_queue Q preempts another queue, because one request of Q arrives in time, - but, after this preemption, Q is not the queue that is set in service, then Q->entity.service is set to 0 when Q is eventually set in service. But Q should have continued receiving service with its old budget (which is why preemption has occurred) and its old service. This commit addresses this issue by resetting service on queue real expiration. Tested-by: Holger Hoffstätte <holger@applied-asynchrony.com> Tested-by: Oleksandr Natalenko <oleksandr@natalenko.name> Signed-off-by: Paolo Valente <paolo.valente@linaro.org> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
committed by
Jens Axboe
parent
4420b095cc
commit
9fae8dd59f
@@ -1544,12 +1544,6 @@ struct bfq_queue *bfq_get_next_queue(struct bfq_data *bfqd)
|
||||
entity = sd->next_in_service;
|
||||
sd->in_service_entity = entity;
|
||||
|
||||
/*
|
||||
* Reset the accumulator of the amount of service that
|
||||
* the entity is about to receive.
|
||||
*/
|
||||
entity->service = 0;
|
||||
|
||||
/*
|
||||
* If entity is no longer a candidate for next
|
||||
* service, then it must be extracted from its active
|
||||
|
||||
Reference in New Issue
Block a user