modules: fix module waiting for dependent modules' init
[linux-2.6-block.git] / kernel / module.c
index be4807fb90e48afd4ec74c460aaf8a214c4b0a4a..68d05d2f4d8a9e70dccadefb078284a939342971 100644 (file)
@@ -2179,9 +2179,11 @@ sys_init_module(void __user *umod,
                return ret;
        }
 
-       /* Now it's a first class citizen! */
-       mutex_lock(&module_mutex);
+       /* Now it's a first class citizen!  Wake up anyone waiting for it. */
        mod->state = MODULE_STATE_LIVE;
+       wake_up(&module_wq);
+
+       mutex_lock(&module_mutex);
        /* Drop initial reference. */
        module_put(mod);
        unwind_remove_table(mod->unwind_info, 1);
@@ -2190,7 +2192,6 @@ sys_init_module(void __user *umod,
        mod->init_size = 0;
        mod->init_text_size = 0;
        mutex_unlock(&module_mutex);
-       wake_up(&module_wq);
 
        return 0;
 }