diff options
| author | Tejun Heo <htejun@gmail.com> | 2005-06-16 06:57:31 -0400 |
|---|---|---|
| committer | Jens Axboe <axboe@suse.de> | 2005-06-16 06:57:31 -0400 |
| commit | c374f127e4ff17a318b9ae95a5bf65f370c2d0b1 (patch) | |
| tree | d1e42b31f9a66582096e9548fc90cc069d6f39e2 /drivers | |
| parent | 9c56187d3c345cc0e7a2f162b8c32543175d7bf7 (diff) | |
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.c | 2 |
1 files changed, 1 insertions, 1 deletions
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, | |||
| 317 | int nrq = q->rq.count[READ] + q->rq.count[WRITE] | 317 | int nrq = q->rq.count[READ] + q->rq.count[WRITE] |
| 318 | - q->in_flight; | 318 | - q->in_flight; |
| 319 | 319 | ||
| 320 | if (nrq == q->unplug_thresh) | 320 | if (nrq >= q->unplug_thresh) |
| 321 | __generic_unplug_device(q); | 321 | __generic_unplug_device(q); |
| 322 | } | 322 | } |
| 323 | } else | 323 | } else |
