[Devel] [PATCH RHEL COMMIT] ve/umh: make queue function one of the subprocess_info parameters

Konstantin Khorenko khorenko at virtuozzo.com
Tue Sep 28 14:42:35 MSK 2021


The commit is pushed to "branch-rh9-5.14.vz9.1.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after ark-5.14
------>
commit c887a0e67201401d5c520e17e109718c85eb1120
Author: Stanislav Kinsburskiy <skinsbursky at virtuozzo.com>
Date:   Tue Sep 28 14:42:35 2021 +0300

    ve/umh: make queue function one of the subprocess_info parameters
    
    This will allow to use a different one for containers.
    
    Signed-off-by: Stanislav Kinsburskiy <skinsbursky at virtuozzo.com>
    
    (cherry-picked from vz8 commit 041bcd5475d5 ("ve/umh: make queue
    function one of the subprocess_info parameters"))
    
    Signed-off-by: Nikita Yushchenko <nikita.yushchenko at virtuozzo.com>
---
 include/linux/umh.h |  1 +
 kernel/umh.c        | 24 ++++++++++++++++++++++--
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/include/linux/umh.h b/include/linux/umh.h
index 244aff638220..d91be2030375 100644
--- a/include/linux/umh.h
+++ b/include/linux/umh.h
@@ -26,6 +26,7 @@ struct subprocess_info {
 	int retval;
 	int (*init)(struct subprocess_info *info, struct cred *new);
 	void (*cleanup)(struct subprocess_info *info);
+	void (*queue)(struct subprocess_info *info);
 	void *data;
 } __randomize_layout;
 
diff --git a/kernel/umh.c b/kernel/umh.c
index 04e60474f1c8..8654aa356b26 100644
--- a/kernel/umh.c
+++ b/kernel/umh.c
@@ -332,6 +332,11 @@ static void helper_unlock(void)
 		wake_up(&running_helpers_waitq);
 }
 
+static void call_usermodehelper_queue(struct subprocess_info *info)
+{
+	queue_work(system_unbound_wq, &info->work);
+}
+
 /**
  * call_usermodehelper_setup - prepare to call a usermode helper
  * @path: path to usermode executable
@@ -355,10 +360,12 @@ static void helper_unlock(void)
  * Function must be runnable in either a process context or the
  * context in which call_usermodehelper_exec is called.
  */
-struct subprocess_info *call_usermodehelper_setup(const char *path, char **argv,
+static struct subprocess_info *__call_usermodehelper_setup(const char *path,
+		char **argv,
 		char **envp, gfp_t gfp_mask,
 		int (*init)(struct subprocess_info *info, struct cred *new),
 		void (*cleanup)(struct subprocess_info *info),
+		void (*queue)(struct subprocess_info *info),
 		void *data)
 {
 	struct subprocess_info *sub_info;
@@ -378,10 +385,23 @@ struct subprocess_info *call_usermodehelper_setup(const char *path, char **argv,
 
 	sub_info->cleanup = cleanup;
 	sub_info->init = init;
+	sub_info->queue = queue;
 	sub_info->data = data;
   out:
 	return sub_info;
 }
+
+struct subprocess_info *call_usermodehelper_setup(const char *path, char **argv,
+		char **envp, gfp_t gfp_mask,
+		int (*init)(struct subprocess_info *info, struct cred *new),
+		void (*cleanup)(struct subprocess_info *info),
+		void *data)
+{
+	return __call_usermodehelper_setup(path, argv, envp, gfp_mask,
+					   init, cleanup,
+					   call_usermodehelper_queue,
+					   data);
+}
 EXPORT_SYMBOL(call_usermodehelper_setup);
 
 /**
@@ -436,7 +456,7 @@ int call_usermodehelper_exec(struct subprocess_info *sub_info, int wait)
 	sub_info->complete = (wait == UMH_NO_WAIT) ? NULL : &done;
 	sub_info->wait = wait;
 
-	queue_work(system_unbound_wq, &sub_info->work);
+	sub_info->queue(sub_info);
 	if (wait == UMH_NO_WAIT)	/* task has freed sub_info */
 		goto unlock;
 


More information about the Devel mailing list