70 lines
2.2 KiB
Diff
70 lines
2.2 KiB
Diff
From: Oleg Nesterov <oleg@redhat.com>
|
|
Date: Fri, 23 Mar 2012 15:02:49 -0700
|
|
Subject: [4/5] kmod: introduce call_modprobe() helper
|
|
|
|
commit 3e63a93b987685f02421e18b2aa452d20553a88b upstream.
|
|
|
|
No functional changes. Move the call_usermodehelper code from
|
|
__request_module() into the new simple helper, call_modprobe().
|
|
|
|
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
|
|
Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
|
|
Cc: Rusty Russell <rusty@rustcorp.com.au>
|
|
Cc: Tejun Heo <tj@kernel.org>
|
|
Cc: David Rientjes <rientjes@google.com>
|
|
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
|
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
|
---
|
|
kernel/kmod.c | 24 ++++++++++++++++--------
|
|
1 file changed, 16 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/kernel/kmod.c b/kernel/kmod.c
|
|
index 685b246..56a29e8 100644
|
|
--- a/kernel/kmod.c
|
|
+++ b/kernel/kmod.c
|
|
@@ -60,6 +60,21 @@ static DECLARE_RWSEM(umhelper_sem);
|
|
*/
|
|
char modprobe_path[KMOD_PATH_LEN] = "/sbin/modprobe";
|
|
|
|
+static int call_modprobe(char *module_name, int wait)
|
|
+{
|
|
+ static char *envp[] = {
|
|
+ "HOME=/",
|
|
+ "TERM=linux",
|
|
+ "PATH=/sbin:/usr/sbin:/bin:/usr/bin",
|
|
+ NULL
|
|
+ };
|
|
+
|
|
+ char *argv[] = { modprobe_path, "-q", "--", module_name, NULL };
|
|
+
|
|
+ return call_usermodehelper_fns(modprobe_path, argv, envp,
|
|
+ wait, NULL, NULL, NULL);
|
|
+}
|
|
+
|
|
/**
|
|
* __request_module - try to load a kernel module
|
|
* @wait: wait (or not) for the operation to complete
|
|
@@ -81,11 +96,6 @@ int __request_module(bool wait, const char *fmt, ...)
|
|
char module_name[MODULE_NAME_LEN];
|
|
unsigned int max_modprobes;
|
|
int ret;
|
|
- char *argv[] = { modprobe_path, "-q", "--", module_name, NULL };
|
|
- static char *envp[] = { "HOME=/",
|
|
- "TERM=linux",
|
|
- "PATH=/sbin:/usr/sbin:/bin:/usr/bin",
|
|
- NULL };
|
|
static atomic_t kmod_concurrent = ATOMIC_INIT(0);
|
|
#define MAX_KMOD_CONCURRENT 50 /* Completely arbitrary value - KAO */
|
|
static int kmod_loop_msg;
|
|
@@ -128,9 +138,7 @@ int __request_module(bool wait, const char *fmt, ...)
|
|
|
|
trace_module_request(module_name, wait, _RET_IP_);
|
|
|
|
- ret = call_usermodehelper_fns(modprobe_path, argv, envp,
|
|
- wait ? UMH_WAIT_PROC : UMH_WAIT_EXEC,
|
|
- NULL, NULL, NULL);
|
|
+ ret = call_modprobe(module_name, wait ? UMH_WAIT_PROC : UMH_WAIT_EXEC);
|
|
|
|
atomic_dec(&kmod_concurrent);
|
|
return ret;
|