|
@@ -989,7 +989,8 @@ static struct cfq_queue *cfq_select_queue(struct cfq_data *cfqd)
|
|
* flight or is idling for a new request, allow either of these
|
|
* flight or is idling for a new request, allow either of these
|
|
* conditions to happen (or time out) before selecting a new queue.
|
|
* conditions to happen (or time out) before selecting a new queue.
|
|
*/
|
|
*/
|
|
- if (cfqq->dispatched || timer_pending(&cfqd->idle_slice_timer)) {
|
|
|
|
|
|
+ if (timer_pending(&cfqd->idle_slice_timer) ||
|
|
|
|
+ (cfqq->dispatched && cfq_cfqq_idle_window(cfqq))) {
|
|
cfqq = NULL;
|
|
cfqq = NULL;
|
|
goto keep_queue;
|
|
goto keep_queue;
|
|
}
|
|
}
|