blk-cgroup: Allow sleeping while dynamically allocating a group
authorVivek Goyal <vgoyal@redhat.com>
Thu, 19 May 2011 19:38:23 +0000 (15:38 -0400)
committerJens Axboe <jaxboe@fusionio.com>
Fri, 20 May 2011 18:34:52 +0000 (20:34 +0200)
commitf469a7b4d5b1d1d053200a9015fd25d59c057f49
tree2c68c0689e40955b186e350b15d44d0b260f4655
parent56edf7d75db5b14d628b46623c414ffbeed68d7f
blk-cgroup: Allow sleeping while dynamically allocating a group

Currently, all the cfq_group or throtl_group allocations happen while
we are holding ->queue_lock and sleeping is not allowed.

Soon, we will move to per cpu stats and also need to allocate the
per group stats. As one can not call alloc_percpu() from atomic
context as it can sleep, we need to drop ->queue_lock, allocate the
group, retake the lock and continue processing.

In throttling code, I check the queue DEAD flag again to make sure
that driver did not call blk_cleanup_queue() in the mean time.

Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
block/blk-core.c
block/blk-throttle.c
block/cfq-iosched.c