diff options
author | Jens Axboe <axboe@suse.de> | 2006-06-01 04:09:56 -0400 |
---|---|---|
committer | Jens Axboe <axboe@suse.de> | 2006-06-01 04:09:56 -0400 |
commit | 12e9fddd6eb827937fcaac8ac7712c7303898b1f (patch) | |
tree | b3fbb502f46319808a50fd2fc7a93668d697f6ec | |
parent | e0de0206a2a37cd3e0ba9954d9f863e11d6d1782 (diff) |
[PATCH] cfq-iosched: Detect idle process issuing async request
If we are anticipating a sync request from this process and we are
waiting for that and see an async request come in, expire that slice
and move on.
Signed-off-by: Jens Axboe <axboe@suse.de>
-rw-r--r-- | block/cfq-iosched.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index d582433441c5..93ba54605eda 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c | |||
@@ -1747,14 +1747,24 @@ cfq_crq_enqueued(struct cfq_data *cfqd, struct cfq_queue *cfqq, | |||
1747 | 1747 | ||
1748 | cfqq->next_crq = cfq_choose_req(cfqd, cfqq->next_crq, crq); | 1748 | cfqq->next_crq = cfq_choose_req(cfqd, cfqq->next_crq, crq); |
1749 | 1749 | ||
1750 | cic = crq->io_context; | ||
1751 | |||
1750 | /* | 1752 | /* |
1751 | * we never wait for an async request and we don't allow preemption | 1753 | * we never wait for an async request and we don't allow preemption |
1752 | * of an async request. so just return early | 1754 | * of an async request. so just return early |
1753 | */ | 1755 | */ |
1754 | if (!cfq_crq_is_sync(crq)) | 1756 | if (!cfq_crq_is_sync(crq)) { |
1757 | /* | ||
1758 | * sync process issued an async request, if it's waiting | ||
1759 | * then expire it and kick rq handling. | ||
1760 | */ | ||
1761 | if (cic == cfqd->active_cic && | ||
1762 | del_timer(&cfqd->idle_slice_timer)) { | ||
1763 | cfq_slice_expired(cfqd, 0); | ||
1764 | cfq_start_queueing(cfqd, cfqq); | ||
1765 | } | ||
1755 | return; | 1766 | return; |
1756 | 1767 | } | |
1757 | cic = crq->io_context; | ||
1758 | 1768 | ||
1759 | cfq_update_io_thinktime(cfqd, cic); | 1769 | cfq_update_io_thinktime(cfqd, cic); |
1760 | cfq_update_io_seektime(cfqd, cic, crq); | 1770 | cfq_update_io_seektime(cfqd, cic, crq); |