[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