diff options
Diffstat (limited to 'kernel/module.c')
| -rw-r--r-- | kernel/module.c | 25 | 
1 files changed, 5 insertions, 20 deletions
diff --git a/kernel/module.c b/kernel/module.c index 24dab046e16c..46a5c2ed1928 100644 --- a/kernel/module.c +++ b/kernel/module.c @@ -3725,12 +3725,6 @@ static noinline int do_init_module(struct module *mod)  	}  	freeinit->module_init = mod->init_layout.base; -	/* -	 * We want to find out whether @mod uses async during init.  Clear -	 * PF_USED_ASYNC.  async_schedule*() will set it. -	 */ -	current->flags &= ~PF_USED_ASYNC; -  	do_mod_ctors(mod);  	/* Start the module */  	if (mod->init != NULL) @@ -3756,22 +3750,13 @@ static noinline int do_init_module(struct module *mod)  	/*  	 * We need to finish all async code before the module init sequence -	 * is done.  This has potential to deadlock.  For example, a newly -	 * detected block device can trigger request_module() of the -	 * default iosched from async probing task.  Once userland helper -	 * reaches here, async_synchronize_full() will wait on the async -	 * task waiting on request_module() and deadlock. -	 * -	 * This deadlock is avoided by perfomring async_synchronize_full() -	 * iff module init queued any async jobs.  This isn't a full -	 * solution as it will deadlock the same if module loading from -	 * async jobs nests more than once; however, due to the various -	 * constraints, this hack seems to be the best option for now. -	 * Please refer to the following thread for details. +	 * is done. This has potential to deadlock if synchronous module +	 * loading is requested from async (which is not allowed!).  	 * -	 * http://thread.gmane.org/gmane.linux.kernel/1420814 +	 * See commit 0fdff3ec6d87 ("async, kmod: warn on synchronous +	 * request_module() from async workers") for more details.  	 */ -	if (!mod->async_probe_requested && (current->flags & PF_USED_ASYNC)) +	if (!mod->async_probe_requested)  		async_synchronize_full();  	ftrace_free_mem(mod, mod->init_layout.base, mod->init_layout.base +  | 
