From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932238AbbCQCr5 (ORCPT ); Mon, 16 Mar 2015 22:47:57 -0400 Received: from out3-smtp.messagingengine.com ([66.111.4.27]:33885 "EHLO out3-smtp.messagingengine.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753255AbbCQCpS (ORCPT ); Mon, 16 Mar 2015 22:45:18 -0400 X-Sasl-enc: lWPz/s+Jt2RfC8EngoosQB97n8tu3I4Od+WUVvDDE3Vz 1426560317 Subject: [RFC PATCH v4 02/12] kmod - rename call_usermodehelper() flags parameter From: Ian Kent To: Kernel Mailing List Cc: David Howells , Oleg Nesterov , Trond Myklebust , "J. Bruce Fields" , Benjamin Coddington , Al Viro , Jeff Layton , "Eric W. Biederman" Date: Tue, 17 Mar 2015 10:45:03 +0800 Message-ID: <20150317024502.24592.6486.stgit@pluto.fritz.box> In-Reply-To: <20150317022308.24592.35785.stgit@pluto.fritz.box> References: <20150317022308.24592.35785.stgit@pluto.fritz.box> User-Agent: StGit/0.17-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Ian Kent 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 Cc: Benjamin Coddington Cc: Al Viro Cc: J. Bruce Fields Cc: David Howells Cc: Trond Myklebust Cc: Oleg Nesterov Cc: Eric W. Biederman Cc: Jeff Layton --- 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);