block, bfq: check low_latency flag in bfq_bfqq_save_state()
authorAngelo Ruocco <angeloruocco90@gmail.com>
Wed, 20 Dec 2017 11:38:32 +0000 (12:38 +0100)
committerJens Axboe <axboe@kernel.dk>
Fri, 5 Jan 2018 16:26:08 +0000 (09:26 -0700)
A just-created bfq_queue will certainly be deemed as interactive on
the arrival of its first I/O request, if the low_latency flag is
set. Yet, if the queue is merged with another queue on the arrival of
its first I/O request, it will not have the chance to be flagged as
interactive. Nevertheless, if the queue is then split soon enough, it
has to be flagged as interactive after the split.

To handle this early-merge scenario correctly, BFQ saves the state of
the queue, on the merge, as if the latter had already been deemed
interactive. So, if the queue is split soon, it will get
weight-raised, because the previous state of the queue is resumed on
the split.

Unfortunately, in the act of saving the state of the newly-created
queue, BFQ doesn't check whether the low_latency flag is set, and this
causes early-merged queues to be then weight-raised, on queue splits,
even if low_latency is off. This commit addresses this problem by
adding the missing check.

Signed-off-by: Angelo Ruocco <angeloruocco90@gmail.com>
Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/bfq-iosched.c

index fa395a260a2356ebade2dc974cd7dd6369d1dac2..2cf395daee80d80ee9e99215d600cdb9ae89f2c8 100644 (file)
@@ -2064,7 +2064,8 @@ static void bfq_bfqq_save_state(struct bfq_queue *bfqq)
        bic->saved_in_large_burst = bfq_bfqq_in_large_burst(bfqq);
        bic->was_in_burst_list = !hlist_unhashed(&bfqq->burst_list_node);
        if (unlikely(bfq_bfqq_just_created(bfqq) &&
-                    !bfq_bfqq_in_large_burst(bfqq))) {
+                    !bfq_bfqq_in_large_burst(bfqq) &&
+                    bfqq->bfqd->low_latency)) {
                /*
                 * bfqq being merged right after being created: bfqq
                 * would have deserved interactive weight raising, but