cfq-iosched: don't schedule a dispatch for a non-idle queue
Shaohua Li [Tue, 9 Nov 2010 13:51:13 +0000 (14:51 +0100)]
Vivek suggests we don't need schedule a dispatch when an idle queue
becomes nonidle. And he is right, cfq_should_preempt already covers
the logic.

Signed-off-by: Shaohua Li <shaohua.li@intel.com>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>

block/cfq-iosched.c

index ca4d199..f905194 100644 (file)
@@ -3523,25 +3523,8 @@ static void cfq_completed_request(struct request_queue *q, struct request *rq)
                }
        }
 
-       if (!cfqd->rq_in_driver) {
+       if (!cfqd->rq_in_driver)
                cfq_schedule_dispatch(cfqd);
-               return;
-       }
-       /*
-        * A queue is idle at cfq_dispatch_requests(), but it gets noidle
-        * later. We schedule a dispatch if the queue has no requests,
-        * otherwise the disk is actually in idle till all requests
-        * are finished even cfq_arm_slice_timer doesn't make the queue idle
-        * */
-       cfqq = cfqd->active_queue;
-       if (!cfqq)
-               return;
-
-       if (RB_EMPTY_ROOT(&cfqq->sort_list) && !cfq_should_idle(cfqd, cfqq) &&
-           (!cfqd->cfq_group_idle || cfqq->cfqg->nr_cfqq > 1)) {
-               cfq_del_timer(cfqd, cfqq);
-               cfq_schedule_dispatch(cfqd);
-       }
 }
 
 /*