diff options
-rw-r--r-- | block/cfq-iosched.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index 9f684cc66bd1..141104835952 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c | |||
@@ -1539,17 +1539,19 @@ cfq_should_preempt(struct cfq_data *cfqd, struct cfq_queue *new_cfqq, | |||
1539 | */ | 1539 | */ |
1540 | static void cfq_preempt_queue(struct cfq_data *cfqd, struct cfq_queue *cfqq) | 1540 | static void cfq_preempt_queue(struct cfq_data *cfqd, struct cfq_queue *cfqq) |
1541 | { | 1541 | { |
1542 | struct cfq_queue *__cfqq, *next; | 1542 | cfq_slice_expired(cfqd, 1); |
1543 | |||
1544 | list_for_each_entry_safe(__cfqq, next, &cfqd->cur_rr, cfq_list) | ||
1545 | cfq_resort_rr_list(__cfqq, 1); | ||
1546 | 1543 | ||
1547 | if (!cfqq->slice_left) | 1544 | if (!cfqq->slice_left) |
1548 | cfqq->slice_left = cfq_prio_to_slice(cfqd, cfqq) / 2; | 1545 | cfqq->slice_left = cfq_prio_to_slice(cfqd, cfqq) / 2; |
1549 | 1546 | ||
1547 | /* | ||
1548 | * Put the new queue at the front of the of the current list, | ||
1549 | * so we know that it will be selected next. | ||
1550 | */ | ||
1551 | BUG_ON(!cfq_cfqq_on_rr(cfqq)); | ||
1552 | list_move(&cfqq->cfq_list, &cfqd->cur_rr); | ||
1553 | |||
1550 | cfqq->slice_end = cfqq->slice_left + jiffies; | 1554 | cfqq->slice_end = cfqq->slice_left + jiffies; |
1551 | cfq_slice_expired(cfqd, 1); | ||
1552 | __cfq_set_active_queue(cfqd, cfqq); | ||
1553 | } | 1555 | } |
1554 | 1556 | ||
1555 | /* | 1557 | /* |