From d0ba257fb80dc0e264f86007038f900758e4483b Mon Sep 17 00:00:00 2001 From: Tejun Heo Date: Thu, 12 Jan 2006 15:39:26 +0100 Subject: [PATCH] --- yaml --- r: 18044 b: refs/heads/master c: 1bc691d357c646700b9523d2aeca02847d3fb3f4 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/block/elevator.c | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/[refs] b/[refs] index 1210bbea5d2c..1dd2e5c9985f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 593195f9b2309693f27b402f34573f7920b82c3e +refs/heads/master: 1bc691d357c646700b9523d2aeca02847d3fb3f4 diff --git a/trunk/block/elevator.c b/trunk/block/elevator.c index 99a4d7b2f8ad..1d0759178e4b 100644 --- a/trunk/block/elevator.c +++ b/trunk/block/elevator.c @@ -610,23 +610,23 @@ void elv_completed_request(request_queue_t *q, struct request *rq) * request is released from the driver, io must be done */ if (blk_account_rq(rq)) { - struct request *first_rq = list_entry_rq(q->queue_head.next); - q->in_flight--; + if (blk_sorted_rq(rq) && e->ops->elevator_completed_req_fn) + e->ops->elevator_completed_req_fn(q, rq); + } - /* - * Check if the queue is waiting for fs requests to be - * drained for flush sequence. - */ - if (q->ordseq && q->in_flight == 0 && + /* + * Check if the queue is waiting for fs requests to be + * drained for flush sequence. + */ + if (unlikely(q->ordseq)) { + struct request *first_rq = list_entry_rq(q->queue_head.next); + if (q->in_flight == 0 && blk_ordered_cur_seq(q) == QUEUE_ORDSEQ_DRAIN && blk_ordered_req_seq(first_rq) > QUEUE_ORDSEQ_DRAIN) { blk_ordered_complete_seq(q, QUEUE_ORDSEQ_DRAIN, 0); q->request_fn(q); } - - if (blk_sorted_rq(rq) && e->ops->elevator_completed_req_fn) - e->ops->elevator_completed_req_fn(q, rq); } }