summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2005-06-16 12:57:31 +0200
committerJens Axboe <axboe@suse.de>2005-06-16 12:57:31 +0200
commitc374f127e4ff17a318b9ae95a5bf65f370c2d0b1 (patch)
treed1e42b31f9a66582096e9548fc90cc069d6f39e2 /drivers
parent9c56187d3c345cc0e7a2f162b8c32543175d7bf7 (diff)
downloadlinux-3.10-c374f127e4ff17a318b9ae95a5bf65f370c2d0b1.tar.gz
linux-3.10-c374f127e4ff17a318b9ae95a5bf65f370c2d0b1.tar.bz2
linux-3.10-c374f127e4ff17a318b9ae95a5bf65f370c2d0b1.zip
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 <axboe@suse.de> Signed-off-by: Tejun Heo <htejun@gmail.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/block/elevator.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/block/elevator.c b/drivers/block/elevator.c
index 98fcabbafe1..89982925f9e 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