diff options
Diffstat (limited to 'kernel/module.c')
| -rw-r--r-- | kernel/module.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/kernel/module.c b/kernel/module.c index be4807fb90e4..5d437bffd8dc 100644 --- a/kernel/module.c +++ b/kernel/module.c | |||
| @@ -2178,10 +2178,20 @@ sys_init_module(void __user *umod, | |||
| 2178 | wake_up(&module_wq); | 2178 | wake_up(&module_wq); |
| 2179 | return ret; | 2179 | return ret; |
| 2180 | } | 2180 | } |
| 2181 | if (ret > 0) { | ||
| 2182 | printk(KERN_WARNING "%s: '%s'->init suspiciously returned %d, " | ||
| 2183 | "it should follow 0/-E convention\n" | ||
| 2184 | KERN_WARNING "%s: loading module anyway...\n", | ||
| 2185 | __func__, mod->name, ret, | ||
| 2186 | __func__); | ||
| 2187 | dump_stack(); | ||
| 2188 | } | ||
| 2181 | 2189 | ||
| 2182 | /* Now it's a first class citizen! */ | 2190 | /* Now it's a first class citizen! Wake up anyone waiting for it. */ |
| 2183 | mutex_lock(&module_mutex); | ||
| 2184 | mod->state = MODULE_STATE_LIVE; | 2191 | mod->state = MODULE_STATE_LIVE; |
| 2192 | wake_up(&module_wq); | ||
| 2193 | |||
| 2194 | mutex_lock(&module_mutex); | ||
| 2185 | /* Drop initial reference. */ | 2195 | /* Drop initial reference. */ |
| 2186 | module_put(mod); | 2196 | module_put(mod); |
| 2187 | unwind_remove_table(mod->unwind_info, 1); | 2197 | unwind_remove_table(mod->unwind_info, 1); |
| @@ -2190,7 +2200,6 @@ sys_init_module(void __user *umod, | |||
| 2190 | mod->init_size = 0; | 2200 | mod->init_size = 0; |
| 2191 | mod->init_text_size = 0; | 2201 | mod->init_text_size = 0; |
| 2192 | mutex_unlock(&module_mutex); | 2202 | mutex_unlock(&module_mutex); |
| 2193 | wake_up(&module_wq); | ||
| 2194 | 2203 | ||
| 2195 | return 0; | 2204 | return 0; |
| 2196 | } | 2205 | } |
