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 333e643058eedc3623187b24bd9b31f5e3a3ea8b Author: Stanislav Kinsburskiy <skinsbur...@virtuozzo.com> Date: Tue Sep 28 14:42:35 2021 +0300
ve/umh: init work separately from other subprocess_info parameters By default UHM requests are handled by a workqueue, i.e. they need "struct work" parameter. It will be different in containers, so move this work init and usage out of generic subprocess handling code. Signed-off-by: Stanislav Kinsburskiy <skinsbur...@virtuozzo.com> (cherry-picked from vz8 commit 12e306e3c6a7 ("ve/umh: init work separately from other subprocess_info parameters")) Signed-off-by: Nikita Yushchenko <nikita.yushche...@virtuozzo.com> --- kernel/umh.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/kernel/umh.c b/kernel/umh.c index 8654aa356b26..e63fd7c9430a 100644 --- a/kernel/umh.c +++ b/kernel/umh.c @@ -157,11 +157,8 @@ static void call_usermodehelper_exec_sync(struct subprocess_info *sub_info) * to perform the usermodehelper request. * */ -static void call_usermodehelper_exec_work(struct work_struct *work) +static void __call_usermodehelper_exec_work(struct subprocess_info *sub_info) { - struct subprocess_info *sub_info = - container_of(work, struct subprocess_info, work); - if (sub_info->wait & UMH_WAIT_PROC) { call_usermodehelper_exec_sync(sub_info); } else { @@ -180,6 +177,14 @@ static void call_usermodehelper_exec_work(struct work_struct *work) } } +static void call_usermodehelper_exec_work(struct work_struct *work) +{ + struct subprocess_info *sub_info = + container_of(work, struct subprocess_info, work); + + __call_usermodehelper_exec_work(sub_info); +} + /* * If set, call_usermodehelper_exec() will exit immediately returning -EBUSY * (used for preventing user land processes from being created after the user @@ -373,8 +378,6 @@ static struct subprocess_info *__call_usermodehelper_setup(const char *path, if (!sub_info) goto out; - INIT_WORK(&sub_info->work, call_usermodehelper_exec_work); - #ifdef CONFIG_STATIC_USERMODEHELPER sub_info->path = CONFIG_STATIC_USERMODEHELPER_PATH; #else @@ -397,10 +400,15 @@ struct subprocess_info *call_usermodehelper_setup(const char *path, char **argv, void (*cleanup)(struct subprocess_info *info), void *data) { - return __call_usermodehelper_setup(path, argv, envp, gfp_mask, + struct subprocess_info *info; + + info = __call_usermodehelper_setup(path, argv, envp, gfp_mask, init, cleanup, call_usermodehelper_queue, data); + if (info) + INIT_WORK(&info->work, call_usermodehelper_exec_work); + return info; } EXPORT_SYMBOL(call_usermodehelper_setup); _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel