diff options
Diffstat (limited to 'block/cfq-iosched.c')
-rw-r--r-- | block/cfq-iosched.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index e7f9e4e3a270..ae14cbaf9d0e 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c | |||
@@ -512,8 +512,11 @@ static void cfq_service_tree_add(struct cfq_data *cfqd, struct cfq_queue *cfqq, | |||
512 | rb_key = cfq_slice_offset(cfqd, cfqq) + jiffies; | 512 | rb_key = cfq_slice_offset(cfqd, cfqq) + jiffies; |
513 | rb_key += cfqq->slice_resid; | 513 | rb_key += cfqq->slice_resid; |
514 | cfqq->slice_resid = 0; | 514 | cfqq->slice_resid = 0; |
515 | } else | 515 | } else { |
516 | rb_key = 0; | 516 | rb_key = -HZ; |
517 | __cfqq = cfq_rb_first(&cfqd->service_tree); | ||
518 | rb_key += __cfqq ? __cfqq->rb_key : jiffies; | ||
519 | } | ||
517 | 520 | ||
518 | if (!RB_EMPTY_NODE(&cfqq->rb_node)) { | 521 | if (!RB_EMPTY_NODE(&cfqq->rb_node)) { |
519 | /* | 522 | /* |
@@ -547,7 +550,7 @@ static void cfq_service_tree_add(struct cfq_data *cfqd, struct cfq_queue *cfqq, | |||
547 | n = &(*p)->rb_left; | 550 | n = &(*p)->rb_left; |
548 | else if (cfq_class_idle(cfqq) > cfq_class_idle(__cfqq)) | 551 | else if (cfq_class_idle(cfqq) > cfq_class_idle(__cfqq)) |
549 | n = &(*p)->rb_right; | 552 | n = &(*p)->rb_right; |
550 | else if (rb_key < __cfqq->rb_key) | 553 | else if (time_before(rb_key, __cfqq->rb_key)) |
551 | n = &(*p)->rb_left; | 554 | n = &(*p)->rb_left; |
552 | else | 555 | else |
553 | n = &(*p)->rb_right; | 556 | n = &(*p)->rb_right; |