]> git.baikalelectronics.ru Git - kernel.git/commit
module: drop the lock while waiting for module to complete initialization.
authorRusty Russell <rusty@rustcorp.com.au>
Wed, 19 May 2010 23:33:39 +0000 (17:33 -0600)
committerRusty Russell <rusty@rustcorp.com.au>
Wed, 19 May 2010 08:03:39 +0000 (17:33 +0930)
commit070e42539e3e545c2631235efdb98f887f74c005
tree27b51ecc15bb30b0d79bb0c702a0124c8b4848fc
parent32aa20a6db071f2d119bf36e49faefd419b5f9d2
module: drop the lock while waiting for module to complete initialization.

This fixes "gave up waiting for init of module libcrc32c." which
happened at boot time due to multiple parallel module loads.

The problem was a deadlock: we wait for a module to finish
initializing, but we keep the module_lock mutex so it can't complete.
In particular, this could reasonably happen if a module does a
request_module() in its initialization routine.

So we change use_module() to return an errno rather than a bool, and if
it's -EBUSY we drop the lock and wait in the caller, then reaquire the
lock.

Reported-by: Brandon Philips <brandon@ifup.org>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Tested-by: Brandon Philips <brandon@ifup.org>
kernel/module.c