Commit 5a5436b9 authored by Paolo Valente's avatar Paolo Valente Committed by Jens Axboe

block, bfq: save also injection state on queue merging

To prevent injection information from being lost on bfq_queue merging,
also the amount of service that a bfq_queue receives must be saved and
restored when the bfq_queue is merged and split, respectively.
Tested-by: default avatarJan Kara <jack@suse.cz>
Signed-off-by: default avatarPaolo Valente <paolo.valente@linaro.org>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent e673914d
...@@ -1024,6 +1024,10 @@ bfq_bfqq_resume_state(struct bfq_queue *bfqq, struct bfq_data *bfqd, ...@@ -1024,6 +1024,10 @@ bfq_bfqq_resume_state(struct bfq_queue *bfqq, struct bfq_data *bfqd,
else else
bfq_clear_bfqq_IO_bound(bfqq); bfq_clear_bfqq_IO_bound(bfqq);
bfqq->last_serv_time_ns = bic->saved_last_serv_time_ns;
bfqq->inject_limit = bic->saved_inject_limit;
bfqq->decrease_time_jif = bic->saved_decrease_time_jif;
bfqq->entity.new_weight = bic->saved_weight; bfqq->entity.new_weight = bic->saved_weight;
bfqq->ttime = bic->saved_ttime; bfqq->ttime = bic->saved_ttime;
bfqq->io_start_time = bic->saved_io_start_time; bfqq->io_start_time = bic->saved_io_start_time;
...@@ -2748,6 +2752,10 @@ static void bfq_bfqq_save_state(struct bfq_queue *bfqq) ...@@ -2748,6 +2752,10 @@ static void bfq_bfqq_save_state(struct bfq_queue *bfqq)
if (!bic) if (!bic)
return; return;
bic->saved_last_serv_time_ns = bfqq->last_serv_time_ns;
bic->saved_inject_limit = bfqq->inject_limit;
bic->saved_decrease_time_jif = bfqq->decrease_time_jif;
bic->saved_weight = bfqq->entity.orig_weight; bic->saved_weight = bfqq->entity.orig_weight;
bic->saved_ttime = bfqq->ttime; bic->saved_ttime = bfqq->ttime;
bic->saved_has_short_ttime = bfq_bfqq_has_short_ttime(bfqq); bic->saved_has_short_ttime = bfq_bfqq_has_short_ttime(bfqq);
......
...@@ -444,6 +444,11 @@ struct bfq_io_cq { ...@@ -444,6 +444,11 @@ struct bfq_io_cq {
unsigned long saved_wr_start_at_switch_to_srt; unsigned long saved_wr_start_at_switch_to_srt;
unsigned int saved_wr_cur_max_time; unsigned int saved_wr_cur_max_time;
struct bfq_ttime saved_ttime; struct bfq_ttime saved_ttime;
/* Save also injection state */
u64 saved_last_serv_time_ns;
unsigned int saved_inject_limit;
unsigned long saved_decrease_time_jif;
}; };
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment