diff options
Diffstat (limited to 'block/cfq-iosched.c')
-rw-r--r-- | block/cfq-iosched.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index a31066d6c20c..4c24986151ba 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c | |||
@@ -357,7 +357,11 @@ static void cfq_resort_rr_list(struct cfq_queue *cfqq, int preempted) | |||
357 | struct cfq_data *cfqd = cfqq->cfqd; | 357 | struct cfq_data *cfqd = cfqq->cfqd; |
358 | struct list_head *list; | 358 | struct list_head *list; |
359 | 359 | ||
360 | BUG_ON(!cfq_cfqq_on_rr(cfqq)); | 360 | /* |
361 | * Resorting requires the cfqq to be on the RR list already. | ||
362 | */ | ||
363 | if (!cfq_cfqq_on_rr(cfqq)) | ||
364 | return; | ||
361 | 365 | ||
362 | list_del(&cfqq->cfq_list); | 366 | list_del(&cfqq->cfq_list); |
363 | 367 | ||
@@ -642,8 +646,7 @@ __cfq_slice_expired(struct cfq_data *cfqd, struct cfq_queue *cfqq, | |||
642 | else | 646 | else |
643 | cfqq->slice_left = 0; | 647 | cfqq->slice_left = 0; |
644 | 648 | ||
645 | if (cfq_cfqq_on_rr(cfqq)) | 649 | cfq_resort_rr_list(cfqq, preempted); |
646 | cfq_resort_rr_list(cfqq, preempted); | ||
647 | 650 | ||
648 | if (cfqq == cfqd->active_queue) | 651 | if (cfqq == cfqd->active_queue) |
649 | cfqd->active_queue = NULL; | 652 | cfqd->active_queue = NULL; |
@@ -1238,9 +1241,7 @@ static void cfq_init_prio_data(struct cfq_queue *cfqq) | |||
1238 | cfqq->org_ioprio = cfqq->ioprio; | 1241 | cfqq->org_ioprio = cfqq->ioprio; |
1239 | cfqq->org_ioprio_class = cfqq->ioprio_class; | 1242 | cfqq->org_ioprio_class = cfqq->ioprio_class; |
1240 | 1243 | ||
1241 | if (cfq_cfqq_on_rr(cfqq)) | 1244 | cfq_resort_rr_list(cfqq, 0); |
1242 | cfq_resort_rr_list(cfqq, 0); | ||
1243 | |||
1244 | cfq_clear_cfqq_prio_changed(cfqq); | 1245 | cfq_clear_cfqq_prio_changed(cfqq); |
1245 | } | 1246 | } |
1246 | 1247 | ||
@@ -1691,8 +1692,7 @@ static void cfq_completed_request(request_queue_t *q, struct request *rq) | |||
1691 | if (!cfq_class_idle(cfqq)) | 1692 | if (!cfq_class_idle(cfqq)) |
1692 | cfqd->last_end_request = now; | 1693 | cfqd->last_end_request = now; |
1693 | 1694 | ||
1694 | if (!cfq_cfqq_dispatched(cfqq) && cfq_cfqq_on_rr(cfqq)) | 1695 | cfq_resort_rr_list(cfqq, 0); |
1695 | cfq_resort_rr_list(cfqq, 0); | ||
1696 | 1696 | ||
1697 | if (sync) | 1697 | if (sync) |
1698 | RQ_CIC(rq)->last_end_request = now; | 1698 | RQ_CIC(rq)->last_end_request = now; |
@@ -1742,8 +1742,7 @@ static void cfq_prio_boost(struct cfq_queue *cfqq) | |||
1742 | /* | 1742 | /* |
1743 | * refile between round-robin lists if we moved the priority class | 1743 | * refile between round-robin lists if we moved the priority class |
1744 | */ | 1744 | */ |
1745 | if ((ioprio_class != cfqq->ioprio_class || ioprio != cfqq->ioprio) && | 1745 | if ((ioprio_class != cfqq->ioprio_class || ioprio != cfqq->ioprio)) |
1746 | cfq_cfqq_on_rr(cfqq)) | ||
1747 | cfq_resort_rr_list(cfqq, 0); | 1746 | cfq_resort_rr_list(cfqq, 0); |
1748 | } | 1747 | } |
1749 | 1748 | ||