From: Tejun Heo Date: Thu, 16 Jun 2005 10:57:31 +0000 (+0200) Subject: This patch fixes q->unplug_thresh condition check in X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=c374f127e4ff17a318b9ae95a5bf65f370c2d0b1;p=openwrt%2Fstaging%2Fblogic.git This patch fixes q->unplug_thresh condition check in __elv_add_request(). rq.count[READ] + rq.count[WRITE] can increase more than one if another thread has allocated a request after the current request is allocated or in_flight could have changed resulting in larger-than-one change of nrq, thus breaking the threshold mechanism. Signed-off-by: Jens Axboe Signed-off-by: Tejun Heo --- diff --git a/drivers/block/elevator.c b/drivers/block/elevator.c index 98fcabbafe1e..89982925f9e2 100644 --- a/drivers/block/elevator.c +++ b/drivers/block/elevator.c @@ -317,7 +317,7 @@ void __elv_add_request(request_queue_t *q, struct request *rq, int where, int nrq = q->rq.count[READ] + q->rq.count[WRITE] - q->in_flight; - if (nrq == q->unplug_thresh) + if (nrq >= q->unplug_thresh) __generic_unplug_device(q); } } else