diff options
author | Shaohua Li <shaohua.li@intel.com> | 2010-11-09 08:51:13 -0500 |
---|---|---|
committer | Jens Axboe <jaxboe@fusionio.com> | 2010-11-09 08:51:13 -0500 |
commit | 2b9408a45978dcda77407859148deeccf403c372 (patch) | |
tree | 52fc549e7cc879c6dea98554f75da24df31c07cf /block/cfq-iosched.c | |
parent | 8e1ac6655104bc6e1e79d67e2df88cc8fa9b6e07 (diff) |
cfq-iosched: don't schedule a dispatch for a non-idle queue
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>
Diffstat (limited to 'block/cfq-iosched.c')
-rw-r--r-- | block/cfq-iosched.c | 19 |
1 files changed, 1 insertions, 18 deletions
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index ca4d19907243..f90519430be6 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c | |||
@@ -3523,25 +3523,8 @@ static void cfq_completed_request(struct request_queue *q, struct request *rq) | |||
3523 | } | 3523 | } |
3524 | } | 3524 | } |
3525 | 3525 | ||
3526 | if (!cfqd->rq_in_driver) { | 3526 | if (!cfqd->rq_in_driver) |
3527 | cfq_schedule_dispatch(cfqd); | 3527 | cfq_schedule_dispatch(cfqd); |
3528 | return; | ||
3529 | } | ||
3530 | /* | ||
3531 | * A queue is idle at cfq_dispatch_requests(), but it gets noidle | ||
3532 | * later. We schedule a dispatch if the queue has no requests, | ||
3533 | * otherwise the disk is actually in idle till all requests | ||
3534 | * are finished even cfq_arm_slice_timer doesn't make the queue idle | ||
3535 | * */ | ||
3536 | cfqq = cfqd->active_queue; | ||
3537 | if (!cfqq) | ||
3538 | return; | ||
3539 | |||
3540 | if (RB_EMPTY_ROOT(&cfqq->sort_list) && !cfq_should_idle(cfqd, cfqq) && | ||
3541 | (!cfqd->cfq_group_idle || cfqq->cfqg->nr_cfqq > 1)) { | ||
3542 | cfq_del_timer(cfqd, cfqq); | ||
3543 | cfq_schedule_dispatch(cfqd); | ||
3544 | } | ||
3545 | } | 3528 | } |
3546 | 3529 | ||
3547 | /* | 3530 | /* |