cfq-iosched: fix no-idle preemption logic
authorCorrado Zoccolo <czoccolo@gmail.com>
Thu, 26 Nov 2009 09:02:58 +0000 (10:02 +0100)
committerJens Axboe <jens.axboe@oracle.com>
Thu, 26 Nov 2009 09:39:31 +0000 (10:39 +0100)
commite4a229196a7c676514c78f6783f8994f64bf681c
treeb2a9e72f863cfaadaad697158969214cd8bb5681
parente459dd08f45d2aa68abb0c02f8ab045cf8a598b8
cfq-iosched: fix no-idle preemption logic

An incoming no-idle queue should preempt the active no-idle queue
 only if the active queue is idling due to service tree empty.
 Previous code was buggy in two ways:
 * it relied on service_tree field to be set on the active queue, while
   it is not set when the code is idling for a new request
 * it didn't check for the service tree empty condition, so could lead to
   LIFO behaviour if multiple queues with depth > 1 were preempting each
   other on an non-NCQ device.

Reported-by: Vivek Goyal <vgoyal@redhat.com>
Signed-off-by: Corrado Zoccolo <czoccolo@gmail.com>
Acked-by: Vivek Goyal <vgoyal@redhat.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
block/cfq-iosched.c