diff options
author | Paolo Valente | 2018-06-25 21:55:36 +0200 |
---|---|---|
committer | Jens Axboe | 2018-07-09 09:07:52 -0600 |
commit | 9fae8dd59ff3d9c19570cbddf12e87d7bb66c8a2 (patch) | |
tree | 9a92db835315bb2cac28e4b3489b824a92e93157 /block/bfq-wf2q.c | |
parent | 4420b095cc474759f6fbdb6351648c7ff9833a54 (diff) |
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>
Diffstat (limited to 'block/bfq-wf2q.c')
-rw-r--r-- | block/bfq-wf2q.c | 6 |
1 files changed, 0 insertions, 6 deletions
diff --git a/block/bfq-wf2q.c b/block/bfq-wf2q.c index 58cf38fcee05..dbc07b456059 100644 --- a/block/bfq-wf2q.c +++ b/block/bfq-wf2q.c @@ -1545,12 +1545,6 @@ struct bfq_queue *bfq_get_next_queue(struct bfq_data *bfqd) 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 * tree, so as to make sure that it won't be |