|
@@ -3117,17 +3117,18 @@ cfq_should_preempt(struct cfq_data *cfqd, struct cfq_queue *new_cfqq,
|
|
*/
|
|
*/
|
|
static void cfq_preempt_queue(struct cfq_data *cfqd, struct cfq_queue *cfqq)
|
|
static void cfq_preempt_queue(struct cfq_data *cfqd, struct cfq_queue *cfqq)
|
|
{
|
|
{
|
|
|
|
+ enum wl_type_t old_type = cfqq_type(cfqd->active_queue);
|
|
|
|
+
|
|
cfq_log_cfqq(cfqd, cfqq, "preempt");
|
|
cfq_log_cfqq(cfqd, cfqq, "preempt");
|
|
|
|
+ cfq_slice_expired(cfqd, 1);
|
|
|
|
|
|
/*
|
|
/*
|
|
* workload type is changed, don't save slice, otherwise preempt
|
|
* workload type is changed, don't save slice, otherwise preempt
|
|
* doesn't happen
|
|
* doesn't happen
|
|
*/
|
|
*/
|
|
- if (cfqq_type(cfqd->active_queue) != cfqq_type(cfqq))
|
|
|
|
|
|
+ if (old_type != cfqq_type(cfqq))
|
|
cfqq->cfqg->saved_workload_slice = 0;
|
|
cfqq->cfqg->saved_workload_slice = 0;
|
|
|
|
|
|
- cfq_slice_expired(cfqd, 1);
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* Put the new queue at the front of the of the current list,
|
|
* Put the new queue at the front of the of the current list,
|
|
* so we know that it will be selected next.
|
|
* so we know that it will be selected next.
|