Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 182943
b: refs/heads/master
c: 53c583d
h: refs/heads/master
i:
  182941: ff163a0
  182939: fb14ce6
  182935: ce2a9ab
  182927: 6fdf699
  182911: 44835a9
v: v3
  • Loading branch information
Corrado Zoccolo authored and Jens Axboe committed Feb 28, 2010
1 parent 9113578 commit 2e300c4
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 27 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: 87c3a922a7ee8cfb9ab837f4ae38c993e9b30711
refs/heads/master: 53c583d2269851de9df1c2e992cb2f7f124a5f55
44 changes: 18 additions & 26 deletions trunk/block/cfq-iosched.c
Original file line number Diff line number Diff line change
Expand Up @@ -222,8 +222,8 @@ struct cfq_data {

unsigned int busy_queues;

int rq_in_driver[2];
int sync_flight;
int rq_in_driver;
int rq_in_flight[2];

/*
* queue-depth detection
Expand Down Expand Up @@ -416,11 +416,6 @@ static struct cfq_queue *cfq_get_queue(struct cfq_data *, bool,
static struct cfq_io_context *cfq_cic_lookup(struct cfq_data *,
struct io_context *);

static inline int rq_in_driver(struct cfq_data *cfqd)
{
return cfqd->rq_in_driver[0] + cfqd->rq_in_driver[1];
}

static inline struct cfq_queue *cic_to_cfqq(struct cfq_io_context *cic,
bool is_sync)
{
Expand Down Expand Up @@ -1414,22 +1409,21 @@ static void cfq_activate_request(struct request_queue *q, struct request *rq)
{
struct cfq_data *cfqd = q->elevator->elevator_data;

cfqd->rq_in_driver[rq_is_sync(rq)]++;
cfqd->rq_in_driver++;
cfq_log_cfqq(cfqd, RQ_CFQQ(rq), "activate rq, drv=%d",
rq_in_driver(cfqd));
cfqd->rq_in_driver);

cfqd->last_position = blk_rq_pos(rq) + blk_rq_sectors(rq);
}

static void cfq_deactivate_request(struct request_queue *q, struct request *rq)
{
struct cfq_data *cfqd = q->elevator->elevator_data;
const int sync = rq_is_sync(rq);

WARN_ON(!cfqd->rq_in_driver[sync]);
cfqd->rq_in_driver[sync]--;
WARN_ON(!cfqd->rq_in_driver);
cfqd->rq_in_driver--;
cfq_log_cfqq(cfqd, RQ_CFQQ(rq), "deactivate rq, drv=%d",
rq_in_driver(cfqd));
cfqd->rq_in_driver);
}

static void cfq_remove_request(struct request *rq)
Expand Down Expand Up @@ -1863,8 +1857,7 @@ static void cfq_dispatch_insert(struct request_queue *q, struct request *rq)
cfqq->dispatched++;
elv_dispatch_sort(q, rq);

if (cfq_cfqq_sync(cfqq))
cfqd->sync_flight++;
cfqd->rq_in_flight[cfq_cfqq_sync(cfqq)]++;
cfqq->nr_sectors += blk_rq_sectors(rq);
}

Expand Down Expand Up @@ -2211,13 +2204,13 @@ static bool cfq_may_dispatch(struct cfq_data *cfqd, struct cfq_queue *cfqq)
/*
* Drain async requests before we start sync IO
*/
if (cfq_should_idle(cfqd, cfqq) && cfqd->rq_in_driver[BLK_RW_ASYNC])
if (cfq_should_idle(cfqd, cfqq) && cfqd->rq_in_flight[BLK_RW_ASYNC])
return false;

/*
* If this is an async queue and we have sync IO in flight, let it wait
*/
if (cfqd->sync_flight && !cfq_cfqq_sync(cfqq))
if (cfqd->rq_in_flight[BLK_RW_SYNC] && !cfq_cfqq_sync(cfqq))
return false;

max_dispatch = cfqd->cfq_quantum;
Expand Down Expand Up @@ -3189,14 +3182,14 @@ static void cfq_update_hw_tag(struct cfq_data *cfqd)
{
struct cfq_queue *cfqq = cfqd->active_queue;

if (rq_in_driver(cfqd) > cfqd->hw_tag_est_depth)
cfqd->hw_tag_est_depth = rq_in_driver(cfqd);
if (cfqd->rq_in_driver > cfqd->hw_tag_est_depth)
cfqd->hw_tag_est_depth = cfqd->rq_in_driver;

if (cfqd->hw_tag == 1)
return;

if (cfqd->rq_queued <= CFQ_HW_QUEUE_MIN &&
rq_in_driver(cfqd) <= CFQ_HW_QUEUE_MIN)
cfqd->rq_in_driver <= CFQ_HW_QUEUE_MIN)
return;

/*
Expand All @@ -3206,7 +3199,7 @@ static void cfq_update_hw_tag(struct cfq_data *cfqd)
*/
if (cfqq && cfq_cfqq_idle_window(cfqq) &&
cfqq->dispatched + cfqq->queued[0] + cfqq->queued[1] <
CFQ_HW_QUEUE_MIN && rq_in_driver(cfqd) < CFQ_HW_QUEUE_MIN)
CFQ_HW_QUEUE_MIN && cfqd->rq_in_driver < CFQ_HW_QUEUE_MIN)
return;

if (cfqd->hw_tag_samples++ < 50)
Expand Down Expand Up @@ -3259,13 +3252,12 @@ static void cfq_completed_request(struct request_queue *q, struct request *rq)

cfq_update_hw_tag(cfqd);

WARN_ON(!cfqd->rq_in_driver[sync]);
WARN_ON(!cfqd->rq_in_driver);
WARN_ON(!cfqq->dispatched);
cfqd->rq_in_driver[sync]--;
cfqd->rq_in_driver--;
cfqq->dispatched--;

if (cfq_cfqq_sync(cfqq))
cfqd->sync_flight--;
cfqd->rq_in_flight[cfq_cfqq_sync(cfqq)]--;

if (sync) {
RQ_CIC(rq)->last_end_request = now;
Expand Down Expand Up @@ -3319,7 +3311,7 @@ static void cfq_completed_request(struct request_queue *q, struct request *rq)
}
}

if (!rq_in_driver(cfqd))
if (!cfqd->rq_in_driver)
cfq_schedule_dispatch(cfqd);
}

Expand Down

0 comments on commit 2e300c4

Please sign in to comment.