async, kmod: warn on synchronous request_module() from async workers
authorTejun Heo <tj@kernel.org>
Wed, 23 Jan 2013 00:48:03 +0000 (16:48 -0800)
committerTejun Heo <tj@kernel.org>
Wed, 23 Jan 2013 00:48:03 +0000 (16:48 -0800)
commit0fdff3ec6d87856cdcc99e69cf42143fdd6c56b4
tree361b0d7f16f03c4e9f196882df5245faa4ac7138
parent21c3c5d2800733b7a276725b8e1ae49a694adc1a
async, kmod: warn on synchronous request_module() from async workers

Synchronous requet_module() from an async worker can lead to deadlock
because module init path may invoke async_synchronize_full().  The
async worker waits for request_module() to complete and the module
loading waits for the async task to finish.  This bug happened in the
block layer because of default elevator auto-loading.

Block layer has been updated not to do default elevator auto-loading
and it has been decided to disallow synchronous request_module() from
async workers.

Trigger WARN_ON_ONCE() on synchronous request_module() from async
workers.

For more details, please refer to the following thread.

  http://thread.gmane.org/gmane.linux.kernel/1420814

Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-by: Alex Riesen <raa.lkml@gmail.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Arjan van de Ven <arjan@linux.intel.com>
kernel/kmod.c