block, cfq: replace current_io_context() with create_io_context()
authorTejun Heo <tj@kernel.org>
Tue, 13 Dec 2011 23:33:40 +0000 (00:33 +0100)
committerJens Axboe <axboe@kernel.dk>
Tue, 13 Dec 2011 23:33:40 +0000 (00:33 +0100)
commitf2dbd76a0a994bc1d5a3d0e7c844cc373832e86c
treecae6a4333ee6e5eb76ef133dfdee95e1943c0ab1
parent1238033c79e92e5c315af12e45396f1a78c73dec
block, cfq: replace current_io_context() with create_io_context()

When called under queue_lock, current_io_context() triggers lockdep
warning if it hits allocation path.  This is because io_context
installation is protected by task_lock which is not IRQ safe, so it
triggers irq-unsafe-lock -> irq -> irq-safe-lock -> irq-unsafe-lock
deadlock warning.

Given the restriction, accessor + creator rolled into one doesn't work
too well.  Drop current_io_context() and let the users access
task->io_context directly inside queue_lock combined with explicit
creation using create_io_context().

Future ioc updates will further consolidate ioc access and the create
interface will be unexported.

While at it, relocate ioc internal interface declarations in blk.h and
add section comments before and after.

This patch does not introduce functional change.

Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-core.c
block/blk-ioc.c
block/blk.h
block/cfq-iosched.c