summaryrefslogtreecommitdiffstats
path: root/block/bfq-wf2q.c
diff options
context:
space:
mode:
authorPaolo Valente <paolo.valente@linaro.org>2018-06-25 21:55:36 +0200
committerJens Axboe <axboe@kernel.dk>2018-07-09 17:07:52 +0200
commit9fae8dd59ff3d9c19570cbddf12e87d7bb66c8a2 (patch)
tree9a92db835315bb2cac28e4b3489b824a92e93157 /block/bfq-wf2q.c
parentblock, bfq: do not expire a queue that will deserve dispatch plugging (diff)
downloadlinux-9fae8dd59ff3d9c19570cbddf12e87d7bb66c8a2.tar.xz
linux-9fae8dd59ff3d9c19570cbddf12e87d7bb66c8a2.zip
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.c6
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