Messages in this thread Patch in this message | | | Subject | [RFC PATCH v4 02/12] kmod - rename call_usermodehelper() flags parameter | From | Ian Kent <> | Date | Tue, 17 Mar 2015 10:45:03 +0800 |
| |
From: Ian Kent <ikent@redhat.com>
The wait parameter of call_usermodehelper() is not quite a parameter that describes the wait behaviour alone and will later be used to request execution within the current namespaces. This flag is tied to the wait field of the subprocess_info structure which is also a field that doesn't specify wait behaviour alone and is used to hold the passed flags information.
So change both the parameter and structure field name to flags.
Signed-off-by: Ian Kent <ikent@redhat.com> Cc: Benjamin Coddington <bcodding@redhat.com> Cc: Al Viro <viro@ZenIV.linux.org.uk> Cc: J. Bruce Fields <bfields@fieldses.org> Cc: David Howells <dhowells@redhat.com> Cc: Trond Myklebust <trond.myklebust@primarydata.com> Cc: Oleg Nesterov <onestero@redhat.com> Cc: Eric W. Biederman <ebiederm@xmission.com> Cc: Jeff Layton <jeff.layton@primarydata.com> --- include/linux/kmod.h | 6 +++--- kernel/kmod.c | 32 +++++++++++++++++--------------- 2 files changed, 20 insertions(+), 18 deletions(-)
diff --git a/include/linux/kmod.h b/include/linux/kmod.h index 0555cc6..e647ddb 100644 --- a/include/linux/kmod.h +++ b/include/linux/kmod.h @@ -59,7 +59,7 @@ struct subprocess_info { char *path; char **argv; char **envp; - int wait; + unsigned int flags; int retval; int (*init)(struct subprocess_info *info, struct cred *new); void (*cleanup)(struct subprocess_info *info); @@ -67,7 +67,7 @@ struct subprocess_info { }; extern int -call_usermodehelper(char *path, char **argv, char **envp, int wait); +call_usermodehelper(char *path, char **argv, char **envp, unsigned int flags); extern struct subprocess_info * call_usermodehelper_setup(char *path, char **argv, char **envp, gfp_t gfp_mask, @@ -75,7 +75,7 @@ call_usermodehelper_setup(char *path, char **argv, char **envp, gfp_t gfp_mask, void (*cleanup)(struct subprocess_info *), void *data); extern int -call_usermodehelper_exec(struct subprocess_info *info, int wait); +call_usermodehelper_exec(struct subprocess_info *info, unsigned int flags); extern struct ctl_table usermodehelper_table[]; diff --git a/kernel/kmod.c b/kernel/kmod.c index 2777f40..e968e2d 100644 --- a/kernel/kmod.c +++ b/kernel/kmod.c @@ -259,7 +259,7 @@ static int ____call_usermodehelper(void *data) out: sub_info->retval = retval; /* wait_for_helper() will call umh_complete if UHM_WAIT_PROC. */ - if (!(sub_info->wait & UMH_WAIT_PROC)) + if (!(sub_info->flags & UMH_WAIT_PROC)) umh_complete(sub_info); if (!retval) return 0; @@ -310,7 +310,7 @@ static void __call_usermodehelper(struct work_struct *work) container_of(work, struct subprocess_info, work); pid_t pid; - if (sub_info->wait & UMH_WAIT_PROC) + if (sub_info->flags & UMH_WAIT_PROC) pid = kernel_thread(wait_for_helper, sub_info, CLONE_FS | CLONE_FILES | SIGCHLD); else @@ -525,16 +525,17 @@ EXPORT_SYMBOL(call_usermodehelper_setup); /** * call_usermodehelper_exec - start a usermode application * @sub_info: information about the subprocessa - * @wait: wait for the application to finish and return status. - * when UMH_NO_WAIT don't wait at all, but you get no useful error back - * when the program couldn't be exec'ed. This makes it safe to call - * from interrupt context. + * @flags: flag to indicate whether to wait for the application to finish + * and return status. If UMH_NO_WAIT is set don't wait at all, but + * you get no useful error back when the program couldn't be exec'ed. + * This makes it safe to call from interrupt context. * * Runs a user-space application. The application is started * asynchronously if wait is not set, and runs as a child of keventd. * (ie. it runs with full root capabilities). */ -int call_usermodehelper_exec(struct subprocess_info *sub_info, int wait) +int call_usermodehelper_exec(struct subprocess_info *sub_info, + unsigned int flags) { DECLARE_COMPLETION_ONSTACK(done); int retval = 0; @@ -553,14 +554,14 @@ int call_usermodehelper_exec(struct subprocess_info *sub_info, int wait) * This makes it possible to use umh_complete to free * the data structure in case of UMH_NO_WAIT. */ - sub_info->complete = (wait == UMH_NO_WAIT) ? NULL : &done; - sub_info->wait = wait; + sub_info->complete = (flags & UMH_NO_WAIT) ? NULL : &done; + sub_info->flags = flags; queue_work(khelper_wq, &sub_info->work); - if (wait == UMH_NO_WAIT) /* task has freed sub_info */ + if (flags & UMH_NO_WAIT) /* task has freed sub_info */ goto unlock; - if (wait & UMH_KILLABLE) { + if (flags & UMH_KILLABLE) { retval = wait_for_completion_killable(&done); if (!retval) goto wait_done; @@ -587,7 +588,7 @@ EXPORT_SYMBOL(call_usermodehelper_exec); * @path: path to usermode executable * @argv: arg vector for process * @envp: environment for process - * @wait: wait for the application to finish and return status. + * @flags: wait for the application to finish and return status. * when UMH_NO_WAIT don't wait at all, but you get no useful error back * when the program couldn't be exec'ed. This makes it safe to call * from interrupt context. @@ -595,17 +596,18 @@ EXPORT_SYMBOL(call_usermodehelper_exec); * This function is the equivalent to use call_usermodehelper_setup() and * call_usermodehelper_exec(). */ -int call_usermodehelper(char *path, char **argv, char **envp, int wait) +int call_usermodehelper(char *path, + char **argv, char **envp, unsigned int flags) { struct subprocess_info *info; - gfp_t gfp_mask = (wait == UMH_NO_WAIT) ? GFP_ATOMIC : GFP_KERNEL; + gfp_t gfp_mask = (flags & UMH_NO_WAIT) ? GFP_ATOMIC : GFP_KERNEL; info = call_usermodehelper_setup(path, argv, envp, gfp_mask, NULL, NULL, NULL); if (info == NULL) return -ENOMEM; - return call_usermodehelper_exec(info, wait); + return call_usermodehelper_exec(info, flags); } EXPORT_SYMBOL(call_usermodehelper);
| |