Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 230577
b: refs/heads/master
c: d2d59e1
h: refs/heads/master
i:
  230575: f3d99ba
v: v3
  • Loading branch information
Shaohua Li authored and Jens Axboe committed Nov 8, 2010
1 parent ae13009 commit a090cb4
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c1e44756fdb7b363fd22cb5514dced40752e36c5
refs/heads/master: d2d59e18a1ea8ecdd1c0a52af320e9a7f5391cc4
23 changes: 22 additions & 1 deletion trunk/block/cfq-iosched.c
Original file line number Diff line number Diff line change
Expand Up @@ -3255,6 +3255,10 @@ cfq_should_preempt(struct cfq_data *cfqd, struct cfq_queue *new_cfqq,
if (cfq_class_rt(new_cfqq) && !cfq_class_rt(cfqq))
return true;

/* An idle queue should not be idle now for some reason */
if (RB_EMPTY_ROOT(&cfqq->sort_list) && !cfq_should_idle(cfqd, cfqq))
return true;

if (!cfqd->active_cic || !cfq_cfqq_wait_request(cfqq))
return false;

Expand Down Expand Up @@ -3508,8 +3512,25 @@ static void cfq_completed_request(struct request_queue *q, struct request *rq)
}
}

if (!cfqd->rq_in_driver)
if (!cfqd->rq_in_driver) {
cfq_schedule_dispatch(cfqd);
return;
}
/*
* A queue is idle at cfq_dispatch_requests(), but it gets noidle
* later. We schedule a dispatch if the queue has no requests,
* otherwise the disk is actually in idle till all requests
* are finished even cfq_arm_slice_timer doesn't make the queue idle
* */
cfqq = cfqd->active_queue;
if (!cfqq)
return;

if (RB_EMPTY_ROOT(&cfqq->sort_list) && !cfq_should_idle(cfqd, cfqq) &&
(!cfqd->cfq_group_idle || cfqq->cfqg->nr_cfqq > 1)) {
cfq_del_timer(cfqd, cfqq);
cfq_schedule_dispatch(cfqd);
}
}

/*
Expand Down

0 comments on commit a090cb4

Please sign in to comment.