diff options
author | Divyesh Shah <dpshah@google.com> | 2010-01-06 21:58:20 -0500 |
---|---|---|
committer | Jens Axboe <jens.axboe@oracle.com> | 2010-01-11 10:16:18 -0500 |
commit | 875feb63b9567442be73efbcc9a8470e376d6423 (patch) | |
tree | 554331e9634a5327daa755bb1b3338697866018b /block/cfq-iosched.c | |
parent | 7af92f8754b87bc78cbfd447d5f4096b25c46682 (diff) |
cfq-iosched: Respect ioprio_class when preempting
In cfq_should_preempt(), we currently allow some cases where a non-RT request
can preempt an ongoing RT cfqq timeslice. This should not happen.
Examples include:
o A sync_noidle wl type non-RT request pre-empting a sync_noidle wl type cfqq
on which we are idling.
o Once we have per-cgroup async queues, a non-RT sync request pre-empting a RT
async cfqq.
Signed-off-by: Divyesh Shah<dpshah@google.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'block/cfq-iosched.c')
-rw-r--r-- | block/cfq-iosched.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index 918c7fd9aeb1..ee130f14d1fc 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c | |||
@@ -3077,6 +3077,12 @@ cfq_should_preempt(struct cfq_data *cfqd, struct cfq_queue *new_cfqq, | |||
3077 | return true; | 3077 | return true; |
3078 | 3078 | ||
3079 | /* | 3079 | /* |
3080 | * Don't allow a non-RT request to preempt an ongoing RT cfqq timeslice. | ||
3081 | */ | ||
3082 | if (cfq_class_rt(cfqq) && !cfq_class_rt(new_cfqq)) | ||
3083 | return false; | ||
3084 | |||
3085 | /* | ||
3080 | * if the new request is sync, but the currently running queue is | 3086 | * if the new request is sync, but the currently running queue is |
3081 | * not, let the sync request have priority. | 3087 | * not, let the sync request have priority. |
3082 | */ | 3088 | */ |