mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-03-16 12:14:06 +00:00
block, bfq: fix switch back from soft-rt weitgh-raising
A bfq_queue may happen to be deemed as soft real-time while it is still enjoying interactive weight-raising. If this happens because of a false positive, then the bfq_queue is likely to loose its soft real-time status soon. Upon losing such a status, the bfq_queue must get back its interactive weight-raising, if its interactive period is not over yet. But this case is not handled. This commit corrects this error. Tested-by: Jan Kara <jack@suse.cz> Signed-off-by: Paolo Valente <paolo.valente@linaro.org> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
7f1995c27b
commit
d1f600fa47
1 changed files with 20 additions and 2 deletions
|
@ -5290,8 +5290,26 @@ bfq_update_io_seektime(struct bfq_data *bfqd, struct bfq_queue *bfqq,
|
|||
|
||||
if (bfqq->wr_coeff > 1 &&
|
||||
bfqq->wr_cur_max_time == bfqd->bfq_wr_rt_max_time &&
|
||||
BFQQ_TOTALLY_SEEKY(bfqq))
|
||||
bfq_bfqq_end_wr(bfqq);
|
||||
BFQQ_TOTALLY_SEEKY(bfqq)) {
|
||||
if (time_is_before_jiffies(bfqq->wr_start_at_switch_to_srt +
|
||||
bfq_wr_duration(bfqd))) {
|
||||
/*
|
||||
* In soft_rt weight raising with the
|
||||
* interactive-weight-raising period
|
||||
* elapsed (so no switch back to
|
||||
* interactive weight raising).
|
||||
*/
|
||||
bfq_bfqq_end_wr(bfqq);
|
||||
} else { /*
|
||||
* stopping soft_rt weight raising
|
||||
* while still in interactive period,
|
||||
* switch back to interactive weight
|
||||
* raising
|
||||
*/
|
||||
switch_back_to_interactive_wr(bfqq, bfqd);
|
||||
bfqq->entity.prio_changed = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void bfq_update_has_short_ttime(struct bfq_data *bfqd,
|
||||
|
|
Loading…
Add table
Reference in a new issue