X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fblock%2Felevator.c;h=35c9385ac13345431c93233d48247b6b388b599f;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=4ce5ca13000c12edbd4d5fa4251aff55f3ac564c;hpb=db216c3d5e4c040e557a50f8f5d35d5c415e8c1c;p=linux-2.6.git diff --git a/drivers/block/elevator.c b/drivers/block/elevator.c index 4ce5ca130..35c9385ac 100644 --- a/drivers/block/elevator.c +++ b/drivers/block/elevator.c @@ -181,6 +181,14 @@ void __elv_add_request(request_queue_t *q, struct request *rq, int where, rq->q = q; q->elevator.elevator_add_req_fn(q, rq, where); + + if (blk_queue_plugged(q)) { + int nrq = q->rq.count[READ] + q->rq.count[WRITE] - q->in_flight; + + if (nrq == q->unplug_thresh) + __generic_unplug_device(q); + } + } void elv_add_request(request_queue_t *q, struct request *rq, int where, @@ -203,7 +211,7 @@ struct request *elv_next_request(request_queue_t *q) struct request *rq; int ret; - while ((rq = __elv_next_request(q))) { + while ((rq = __elv_next_request(q)) != NULL) { /* * just mark as started even if we don't start it, a request * that has been delayed should not be passed by new incoming