diff options
author | Jens Axboe <jaxboe@fusionio.com> | 2011-03-07 08:59:06 +0100 |
---|---|---|
committer | Jens Axboe <jaxboe@fusionio.com> | 2011-03-07 08:59:06 +0100 |
commit | 93803e0140c6216b68fe926ccc611297120da273 (patch) | |
tree | c70e354f3029a00f83293b0d6bedf6738437ebab /block/cfq-iosched.c | |
parent | block: Move blk_throtl_exit() call to blk_cleanup_queue() (diff) | |
download | linux-93803e0140c6216b68fe926ccc611297120da273.tar.xz linux-93803e0140c6216b68fe926ccc611297120da273.zip |
cfq-iosched: fix race in cfq_set_request()
We need to hold the queue lock over the reference increment,
it's not atomic anymore.
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
Diffstat (limited to 'block/cfq-iosched.c')
-rw-r--r-- | block/cfq-iosched.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index 3202c7e87fb3..fb2141ec205c 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c @@ -3675,12 +3675,11 @@ new_queue: cfqq->allocated[rw]++; - spin_unlock_irqrestore(q->queue_lock, flags); - cfqq->ref++; rq->elevator_private[0] = cic; rq->elevator_private[1] = cfqq; rq->elevator_private[2] = cfq_ref_get_cfqg(cfqq->cfqg); + spin_unlock_irqrestore(q->queue_lock, flags); return 0; queue_fail: |