update version to 3.19
Signed-off-by: snoweay <snoweay@163.com> (cherry picked from commit 9040c722c2132f766383a9dddf630a86b5735d48)
This commit is contained in:
parent
ffde4428e9
commit
c819e3f82b
@ -1,7 +1,7 @@
|
|||||||
From 4a49af49be378835b65016d5465eae44107a52e1 Mon Sep 17 00:00:00 2001
|
From f700bf90e9339d41132a62c24dde9b1c0fa8a9ee Mon Sep 17 00:00:00 2001
|
||||||
From: "fu.lin" <fulin10@huawei.com>
|
From: snoweay <snoweay@163.com>
|
||||||
Date: Tue, 13 Apr 2021 10:39:45 +0800
|
Date: Thu, 25 Apr 2024 17:36:32 +0800
|
||||||
Subject: [PATCH 4/6] criu: dump and restore cpu affinity of each thread
|
Subject: [PATCH] criu: dump and restore cpu affinity of each thread
|
||||||
|
|
||||||
Criu should dump and restore threads' or processes'
|
Criu should dump and restore threads' or processes'
|
||||||
cpu affinity.
|
cpu affinity.
|
||||||
@ -38,40 +38,43 @@ Signed-off-by: Sang Yan <sangyan@huawei.com>
|
|||||||
create mode 100644 test/zdtm/static/cpu-affinity0.desc
|
create mode 100644 test/zdtm/static/cpu-affinity0.desc
|
||||||
|
|
||||||
diff --git a/compel/arch/arm/plugins/std/syscalls/syscall.def b/compel/arch/arm/plugins/std/syscalls/syscall.def
|
diff --git a/compel/arch/arm/plugins/std/syscalls/syscall.def b/compel/arch/arm/plugins/std/syscalls/syscall.def
|
||||||
index e6508ed..1b877d1 100644
|
index 7489ee0..9403fc2 100644
|
||||||
--- a/compel/arch/arm/plugins/std/syscalls/syscall.def
|
--- a/compel/arch/arm/plugins/std/syscalls/syscall.def
|
||||||
+++ b/compel/arch/arm/plugins/std/syscalls/syscall.def
|
+++ b/compel/arch/arm/plugins/std/syscalls/syscall.def
|
||||||
@@ -116,5 +116,6 @@ fsopen 430 430 (char *fsname, unsigned int flags)
|
@@ -118,6 +118,7 @@ fsopen 430 430 (char *fsname, unsigned int flags)
|
||||||
fsconfig 431 431 (int fd, unsigned int cmd, const char *key, const char *value, int aux)
|
fsconfig 431 431 (int fd, unsigned int cmd, const char *key, const char *value, int aux)
|
||||||
fsmount 432 432 (int fd, unsigned int flags, unsigned int attr_flags)
|
fsmount 432 432 (int fd, unsigned int flags, unsigned int attr_flags)
|
||||||
clone3 435 435 (struct clone_args *uargs, size_t size)
|
clone3 435 435 (struct clone_args *uargs, size_t size)
|
||||||
+sched_setaffinity 122 241 (int fd, size_t cpusetsize, const cpu_set_t *mask)
|
+sched_setaffinity 122 241 (int fd, size_t cpusetsize, const cpu_set_t *mask)
|
||||||
pidfd_open 434 434 (pid_t pid, unsigned int flags)
|
pidfd_open 434 434 (pid_t pid, unsigned int flags)
|
||||||
|
openat2 437 437 (int dirfd, char *pathname, struct open_how *how, size_t size)
|
||||||
pidfd_getfd 438 438 (int pidfd, int targetfd, unsigned int flags)
|
pidfd_getfd 438 438 (int pidfd, int targetfd, unsigned int flags)
|
||||||
diff --git a/compel/arch/ppc64/plugins/std/syscalls/syscall-ppc64.tbl b/compel/arch/ppc64/plugins/std/syscalls/syscall-ppc64.tbl
|
diff --git a/compel/arch/ppc64/plugins/std/syscalls/syscall-ppc64.tbl b/compel/arch/ppc64/plugins/std/syscalls/syscall-ppc64.tbl
|
||||||
index 1bb626b..dd79187 100644
|
index 4c9b75c..43ecc40 100644
|
||||||
--- a/compel/arch/ppc64/plugins/std/syscalls/syscall-ppc64.tbl
|
--- a/compel/arch/ppc64/plugins/std/syscalls/syscall-ppc64.tbl
|
||||||
+++ b/compel/arch/ppc64/plugins/std/syscalls/syscall-ppc64.tbl
|
+++ b/compel/arch/ppc64/plugins/std/syscalls/syscall-ppc64.tbl
|
||||||
@@ -112,5 +112,6 @@ __NR_fsopen 430 sys_fsopen (char *fsname, unsigned int flags)
|
@@ -114,6 +114,7 @@ __NR_fsopen 430 sys_fsopen (char *fsname, unsigned int flags)
|
||||||
__NR_fsconfig 431 sys_fsconfig (int fd, unsigned int cmd, const char *key, const char *value, int aux)
|
__NR_fsconfig 431 sys_fsconfig (int fd, unsigned int cmd, const char *key, const char *value, int aux)
|
||||||
__NR_fsmount 432 sys_fsmount (int fd, unsigned int flags, unsigned int attr_flags)
|
__NR_fsmount 432 sys_fsmount (int fd, unsigned int flags, unsigned int attr_flags)
|
||||||
__NR_clone3 435 sys_clone3 (struct clone_args *uargs, size_t size)
|
__NR_clone3 435 sys_clone3 (struct clone_args *uargs, size_t size)
|
||||||
+__NR_sched_setaffinity 222 sys_sched_setaffinity (int fd, size_t cpusetsize, const cpu_set_t *mask)
|
+__NR_sched_setaffinity 222 sys_sched_setaffinity (int fd, size_t cpusetsize, const cpu_set_t *mask)
|
||||||
__NR_pidfd_open 434 sys_pidfd_open (pid_t pid, unsigned int flags)
|
__NR_pidfd_open 434 sys_pidfd_open (pid_t pid, unsigned int flags)
|
||||||
|
__NR_openat2 437 sys_openat2 (int dirfd, char *pathname, struct open_how *how, size_t size)
|
||||||
__NR_pidfd_getfd 438 sys_pidfd_getfd (int pidfd, int targetfd, unsigned int flags)
|
__NR_pidfd_getfd 438 sys_pidfd_getfd (int pidfd, int targetfd, unsigned int flags)
|
||||||
diff --git a/compel/arch/s390/plugins/std/syscalls/syscall-s390.tbl b/compel/arch/s390/plugins/std/syscalls/syscall-s390.tbl
|
diff --git a/compel/arch/s390/plugins/std/syscalls/syscall-s390.tbl b/compel/arch/s390/plugins/std/syscalls/syscall-s390.tbl
|
||||||
index 7178bf4..282adaf 100644
|
index af7d550..ef72a2f 100644
|
||||||
--- a/compel/arch/s390/plugins/std/syscalls/syscall-s390.tbl
|
--- a/compel/arch/s390/plugins/std/syscalls/syscall-s390.tbl
|
||||||
+++ b/compel/arch/s390/plugins/std/syscalls/syscall-s390.tbl
|
+++ b/compel/arch/s390/plugins/std/syscalls/syscall-s390.tbl
|
||||||
@@ -112,5 +112,6 @@ __NR_fsopen 430 sys_fsopen (char *fsname, unsigned int flags)
|
@@ -114,6 +114,7 @@ __NR_fsopen 430 sys_fsopen (char *fsname, unsigned int flags)
|
||||||
__NR_fsconfig 431 sys_fsconfig (int fd, unsigned int cmd, const char *key, const char *value, int aux)
|
__NR_fsconfig 431 sys_fsconfig (int fd, unsigned int cmd, const char *key, const char *value, int aux)
|
||||||
__NR_fsmount 432 sys_fsmount (int fd, unsigned int flags, unsigned int attr_flags)
|
__NR_fsmount 432 sys_fsmount (int fd, unsigned int flags, unsigned int attr_flags)
|
||||||
__NR_clone3 435 sys_clone3 (struct clone_args *uargs, size_t size)
|
__NR_clone3 435 sys_clone3 (struct clone_args *uargs, size_t size)
|
||||||
+__NR_sched_setaffinity 239 sys_sched_setaffinity (int fd, size_t cpusetsize, const cpu_set_t *mask)
|
+__NR_sched_setaffinity 239 sys_sched_setaffinity (int fd, size_t cpusetsize, const cpu_set_t *mask)
|
||||||
__NR_pidfd_open 434 sys_pidfd_open (pid_t pid, unsigned int flags)
|
__NR_pidfd_open 434 sys_pidfd_open (pid_t pid, unsigned int flags)
|
||||||
|
__NR_openat2 437 sys_openat2 (int dirfd, char *pathname, struct open_how *how, size_t size)
|
||||||
__NR_pidfd_getfd 438 sys_pidfd_getfd (int pidfd, int targetfd, unsigned int flags)
|
__NR_pidfd_getfd 438 sys_pidfd_getfd (int pidfd, int targetfd, unsigned int flags)
|
||||||
diff --git a/compel/arch/x86/plugins/std/syscalls/syscall_32.tbl b/compel/arch/x86/plugins/std/syscalls/syscall_32.tbl
|
diff --git a/compel/arch/x86/plugins/std/syscalls/syscall_32.tbl b/compel/arch/x86/plugins/std/syscalls/syscall_32.tbl
|
||||||
index 7e456cd..3fe3194 100644
|
index ab36a5c..6c6522a 100644
|
||||||
--- a/compel/arch/x86/plugins/std/syscalls/syscall_32.tbl
|
--- a/compel/arch/x86/plugins/std/syscalls/syscall_32.tbl
|
||||||
+++ b/compel/arch/x86/plugins/std/syscalls/syscall_32.tbl
|
+++ b/compel/arch/x86/plugins/std/syscalls/syscall_32.tbl
|
||||||
@@ -63,6 +63,7 @@ __NR_mincore 218 sys_mincore (void *addr, unsigned long size, unsigned char *
|
@@ -63,6 +63,7 @@ __NR_mincore 218 sys_mincore (void *addr, unsigned long size, unsigned char *
|
||||||
@ -83,7 +86,7 @@ index 7e456cd..3fe3194 100644
|
|||||||
__NR_get_thread_area 244 sys_get_thread_area (user_desc_t *info)
|
__NR_get_thread_area 244 sys_get_thread_area (user_desc_t *info)
|
||||||
__NR_io_setup 245 sys_io_setup (unsigned nr_reqs, aio_context_t *ctx32p)
|
__NR_io_setup 245 sys_io_setup (unsigned nr_reqs, aio_context_t *ctx32p)
|
||||||
diff --git a/compel/arch/x86/plugins/std/syscalls/syscall_64.tbl b/compel/arch/x86/plugins/std/syscalls/syscall_64.tbl
|
diff --git a/compel/arch/x86/plugins/std/syscalls/syscall_64.tbl b/compel/arch/x86/plugins/std/syscalls/syscall_64.tbl
|
||||||
index 2dfcc6e..c1d119d 100644
|
index 57681b7..4746bd2 100644
|
||||||
--- a/compel/arch/x86/plugins/std/syscalls/syscall_64.tbl
|
--- a/compel/arch/x86/plugins/std/syscalls/syscall_64.tbl
|
||||||
+++ b/compel/arch/x86/plugins/std/syscalls/syscall_64.tbl
|
+++ b/compel/arch/x86/plugins/std/syscalls/syscall_64.tbl
|
||||||
@@ -73,6 +73,7 @@ __NR_mount 165 sys_mount (char *dev_nmae, char *dir_name, char *type, unsign
|
@@ -73,6 +73,7 @@ __NR_mount 165 sys_mount (char *dev_nmae, char *dir_name, char *type, unsign
|
||||||
@ -95,22 +98,22 @@ index 2dfcc6e..c1d119d 100644
|
|||||||
__NR_io_setup 206 sys_io_setup (unsigned nr_events, aio_context_t *ctx)
|
__NR_io_setup 206 sys_io_setup (unsigned nr_events, aio_context_t *ctx)
|
||||||
__NR_io_getevents 208 sys_io_getevents (aio_context_t ctx, long min_nr, long nr, struct io_event *evs, struct timespec *tmo)
|
__NR_io_getevents 208 sys_io_getevents (aio_context_t ctx, long min_nr, long nr, struct io_event *evs, struct timespec *tmo)
|
||||||
diff --git a/criu/config.c b/criu/config.c
|
diff --git a/criu/config.c b/criu/config.c
|
||||||
index 91fb0b6..71f99c9 100644
|
index 1322a49..f3f4666 100644
|
||||||
--- a/criu/config.c
|
--- a/criu/config.c
|
||||||
+++ b/criu/config.c
|
+++ b/criu/config.c
|
||||||
@@ -695,6 +695,7 @@ int parse_options(int argc, char **argv, bool *usage_error, bool *has_exec_cmd,
|
@@ -698,6 +698,7 @@ int parse_options(int argc, char **argv, bool *usage_error, bool *has_exec_cmd,
|
||||||
{ "cgroup-yard", required_argument, 0, 1096 },
|
|
||||||
{ "pre-dump-mode", required_argument, 0, 1097 },
|
{ "pre-dump-mode", required_argument, 0, 1097 },
|
||||||
{ "file-validation", required_argument, 0, 1098 },
|
{ "file-validation", required_argument, 0, 1098 },
|
||||||
|
BOOL_OPT("skip-file-rwx-check", &opts.skip_file_rwx_check),
|
||||||
+ BOOL_OPT("with-cpu-affinity", &opts.with_cpu_affinity),
|
+ BOOL_OPT("with-cpu-affinity", &opts.with_cpu_affinity),
|
||||||
{ "lsm-mount-context", required_argument, 0, 1099 },
|
{ "lsm-mount-context", required_argument, 0, 1099 },
|
||||||
{ "network-lock", required_argument, 0, 1100 },
|
{ "network-lock", required_argument, 0, 1100 },
|
||||||
{},
|
BOOL_OPT("mntns-compat-mode", &opts.mntns_compat_mode),
|
||||||
diff --git a/criu/cr-dump.c b/criu/cr-dump.c
|
diff --git a/criu/cr-dump.c b/criu/cr-dump.c
|
||||||
index 940f622..f07fe6e 100644
|
index ee5974a..eb540b0 100644
|
||||||
--- a/criu/cr-dump.c
|
--- a/criu/cr-dump.c
|
||||||
+++ b/criu/cr-dump.c
|
+++ b/criu/cr-dump.c
|
||||||
@@ -139,6 +139,7 @@ static int dump_sched_info(int pid, ThreadCoreEntry *tc)
|
@@ -140,6 +140,7 @@ static int dump_sched_info(int pid, ThreadCoreEntry *tc)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct sched_param sp;
|
struct sched_param sp;
|
||||||
@ -118,7 +121,7 @@ index 940f622..f07fe6e 100644
|
|||||||
|
|
||||||
BUILD_BUG_ON(SCHED_OTHER != 0); /* default in proto message */
|
BUILD_BUG_ON(SCHED_OTHER != 0); /* default in proto message */
|
||||||
|
|
||||||
@@ -183,6 +184,18 @@ static int dump_sched_info(int pid, ThreadCoreEntry *tc)
|
@@ -184,6 +185,18 @@ static int dump_sched_info(int pid, ThreadCoreEntry *tc)
|
||||||
pr_info("\tdumping %d nice for %d\n", ret, pid);
|
pr_info("\tdumping %d nice for %d\n", ret, pid);
|
||||||
tc->has_sched_nice = true;
|
tc->has_sched_nice = true;
|
||||||
tc->sched_nice = ret;
|
tc->sched_nice = ret;
|
||||||
@ -138,10 +141,10 @@ index 940f622..f07fe6e 100644
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
diff --git a/criu/cr-restore.c b/criu/cr-restore.c
|
diff --git a/criu/cr-restore.c b/criu/cr-restore.c
|
||||||
index 9d2d957..5b645c1 100644
|
index 2700497..9855a3d 100644
|
||||||
--- a/criu/cr-restore.c
|
--- a/criu/cr-restore.c
|
||||||
+++ b/criu/cr-restore.c
|
+++ b/criu/cr-restore.c
|
||||||
@@ -118,6 +118,7 @@ static int prepare_restorer_blob(void);
|
@@ -120,6 +120,7 @@ static int prepare_restorer_blob(void);
|
||||||
static int prepare_rlimits(int pid, struct task_restore_args *, CoreEntry *core);
|
static int prepare_rlimits(int pid, struct task_restore_args *, CoreEntry *core);
|
||||||
static int prepare_posix_timers(int pid, struct task_restore_args *ta, CoreEntry *core);
|
static int prepare_posix_timers(int pid, struct task_restore_args *ta, CoreEntry *core);
|
||||||
static int prepare_signals(int pid, struct task_restore_args *, CoreEntry *core);
|
static int prepare_signals(int pid, struct task_restore_args *, CoreEntry *core);
|
||||||
@ -149,7 +152,7 @@ index 9d2d957..5b645c1 100644
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Architectures can overwrite this function to restore registers that are not
|
* Architectures can overwrite this function to restore registers that are not
|
||||||
@@ -899,6 +900,9 @@ static int restore_one_alive_task(int pid, CoreEntry *core)
|
@@ -921,6 +922,9 @@ static int restore_one_alive_task(int pid, CoreEntry *core)
|
||||||
if (prepare_signals(pid, ta, core))
|
if (prepare_signals(pid, ta, core))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@ -159,7 +162,7 @@ index 9d2d957..5b645c1 100644
|
|||||||
if (prepare_posix_timers(pid, ta, core))
|
if (prepare_posix_timers(pid, ta, core))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@@ -3153,6 +3157,24 @@ out:
|
@@ -3298,6 +3302,24 @@ out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -184,7 +187,7 @@ index 9d2d957..5b645c1 100644
|
|||||||
extern void __gcov_flush(void) __attribute__((weak));
|
extern void __gcov_flush(void) __attribute__((weak));
|
||||||
void __gcov_flush(void)
|
void __gcov_flush(void)
|
||||||
{
|
{
|
||||||
@@ -3603,6 +3625,7 @@ static int sigreturn_restore(pid_t pid, struct task_restore_args *task_args, uns
|
@@ -3762,6 +3784,7 @@ static int sigreturn_restore(pid_t pid, struct task_restore_args *task_args, uns
|
||||||
RST_MEM_FIXUP_PPTR(task_args->timerfd);
|
RST_MEM_FIXUP_PPTR(task_args->timerfd);
|
||||||
RST_MEM_FIXUP_PPTR(task_args->posix_timers);
|
RST_MEM_FIXUP_PPTR(task_args->posix_timers);
|
||||||
RST_MEM_FIXUP_PPTR(task_args->siginfo);
|
RST_MEM_FIXUP_PPTR(task_args->siginfo);
|
||||||
@ -193,33 +196,33 @@ index 9d2d957..5b645c1 100644
|
|||||||
RST_MEM_FIXUP_PPTR(task_args->helpers);
|
RST_MEM_FIXUP_PPTR(task_args->helpers);
|
||||||
RST_MEM_FIXUP_PPTR(task_args->zombies);
|
RST_MEM_FIXUP_PPTR(task_args->zombies);
|
||||||
diff --git a/criu/crtools.c b/criu/crtools.c
|
diff --git a/criu/crtools.c b/criu/crtools.c
|
||||||
index 6a75cd1..b5a36b9 100644
|
index 94657f4..a8df89d 100644
|
||||||
--- a/criu/crtools.c
|
--- a/criu/crtools.c
|
||||||
+++ b/criu/crtools.c
|
+++ b/criu/crtools.c
|
||||||
@@ -445,6 +445,8 @@ usage:
|
@@ -509,6 +509,8 @@ usage:
|
||||||
" --file-validation METHOD\n"
|
" --file-validation METHOD\n"
|
||||||
" pass the validation method to be used; argument\n"
|
" pass the validation method to be used; argument\n"
|
||||||
" can be 'filesize' or 'buildid' (default).\n"
|
" can be 'filesize' or 'buildid' (default).\n"
|
||||||
+ " --with-cpu-affinity Allow to restore cpu affinity. Only for hosts with\n"
|
+ " --with-cpu-affinity Allow to restore cpu affinity. Only for hosts with\n"
|
||||||
+ " same cpu quantity.\n"
|
+ " same cpu quantity.\n"
|
||||||
"\n"
|
" --skip-file-rwx-check\n"
|
||||||
"Check options:\n"
|
" Skip checking file permissions\n"
|
||||||
" Without options, \"criu check\" checks availability of absolutely required\n"
|
" (r/w/x for u/g/o) on restore.\n"
|
||||||
diff --git a/criu/include/cr_options.h b/criu/include/cr_options.h
|
diff --git a/criu/include/cr_options.h b/criu/include/cr_options.h
|
||||||
index a34f8db..3b50e59 100644
|
index 60cf943..db7484a 100644
|
||||||
--- a/criu/include/cr_options.h
|
--- a/criu/include/cr_options.h
|
||||||
+++ b/criu/include/cr_options.h
|
+++ b/criu/include/cr_options.h
|
||||||
@@ -188,6 +188,8 @@ struct cr_options {
|
@@ -212,6 +212,8 @@ struct cr_options {
|
||||||
|
|
||||||
/* This stores which method to use for file validation. */
|
/* This stores which method to use for file validation. */
|
||||||
int file_validation_method;
|
int file_validation_method;
|
||||||
+ /* restore cpu affinity */
|
+ /* restore cpu affinity */
|
||||||
+ int with_cpu_affinity;
|
+ int with_cpu_affinity;
|
||||||
};
|
|
||||||
|
|
||||||
extern struct cr_options opts;
|
/* Shows the mode criu is running at the moment: dump/pre-dump/restore/... */
|
||||||
|
enum criu_mode mode;
|
||||||
diff --git a/criu/include/restorer.h b/criu/include/restorer.h
|
diff --git a/criu/include/restorer.h b/criu/include/restorer.h
|
||||||
index 934d60c..c2ef8f0 100644
|
index f398d8d..668aa65 100644
|
||||||
--- a/criu/include/restorer.h
|
--- a/criu/include/restorer.h
|
||||||
+++ b/criu/include/restorer.h
|
+++ b/criu/include/restorer.h
|
||||||
@@ -1,6 +1,7 @@
|
@@ -1,6 +1,7 @@
|
||||||
@ -230,7 +233,7 @@ index 934d60c..c2ef8f0 100644
|
|||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
@@ -162,6 +163,8 @@ struct task_restore_args {
|
@@ -170,6 +171,8 @@ struct task_restore_args {
|
||||||
siginfo_t *siginfo;
|
siginfo_t *siginfo;
|
||||||
unsigned int siginfo_n;
|
unsigned int siginfo_n;
|
||||||
|
|
||||||
@ -240,10 +243,10 @@ index 934d60c..c2ef8f0 100644
|
|||||||
unsigned int tcp_socks_n;
|
unsigned int tcp_socks_n;
|
||||||
|
|
||||||
diff --git a/criu/pie/restorer.c b/criu/pie/restorer.c
|
diff --git a/criu/pie/restorer.c b/criu/pie/restorer.c
|
||||||
index 4304691..fbc89fe 100644
|
index 0297165..d8e7d41 100644
|
||||||
--- a/criu/pie/restorer.c
|
--- a/criu/pie/restorer.c
|
||||||
+++ b/criu/pie/restorer.c
|
+++ b/criu/pie/restorer.c
|
||||||
@@ -425,6 +425,40 @@ static int restore_signals(siginfo_t *ptr, int nr, bool group)
|
@@ -477,6 +477,40 @@ static int restore_signals(siginfo_t *ptr, int nr, bool group)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -281,10 +284,10 @@ index 4304691..fbc89fe 100644
|
|||||||
+ return 0;
|
+ return 0;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
static int restore_seccomp_filter(pid_t tid, struct thread_restore_args *args)
|
static int restore_rseq(struct rst_rseq_param *rseq)
|
||||||
{
|
{
|
||||||
unsigned int flags = args->seccomp_force_tsync ? SECCOMP_FILTER_FLAG_TSYNC : 0;
|
int ret;
|
||||||
@@ -1856,6 +1890,10 @@ long __export_restore_task(struct task_restore_args *args)
|
@@ -2139,6 +2173,10 @@ __visible long __export_restore_task(struct task_restore_args *args)
|
||||||
if (ret)
|
if (ret)
|
||||||
goto core_restore_end;
|
goto core_restore_end;
|
||||||
|
|
||||||
@ -296,7 +299,7 @@ index 4304691..fbc89fe 100644
|
|||||||
|
|
||||||
rst_tcp_socks_all(args);
|
rst_tcp_socks_all(args);
|
||||||
diff --git a/criu/pstree.c b/criu/pstree.c
|
diff --git a/criu/pstree.c b/criu/pstree.c
|
||||||
index d5080e5..778c884 100644
|
index 8c44e71..efc52c0 100644
|
||||||
--- a/criu/pstree.c
|
--- a/criu/pstree.c
|
||||||
+++ b/criu/pstree.c
|
+++ b/criu/pstree.c
|
||||||
@@ -58,11 +58,13 @@ CoreEntry *core_entry_alloc(int th, int tsk)
|
@@ -58,11 +58,13 @@ CoreEntry *core_entry_alloc(int th, int tsk)
|
||||||
@ -326,10 +329,10 @@ index d5080e5..778c884 100644
|
|||||||
xfree(core);
|
xfree(core);
|
||||||
core = NULL;
|
core = NULL;
|
||||||
diff --git a/images/core.proto b/images/core.proto
|
diff --git a/images/core.proto b/images/core.proto
|
||||||
index b713119..39e7f32 100644
|
index 5b07b5c..e4ca389 100644
|
||||||
--- a/images/core.proto
|
--- a/images/core.proto
|
||||||
+++ b/images/core.proto
|
+++ b/images/core.proto
|
||||||
@@ -83,6 +83,10 @@ message thread_sas_entry {
|
@@ -90,6 +90,10 @@ message thread_sas_entry {
|
||||||
required uint32 ss_flags = 3;
|
required uint32 ss_flags = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -340,19 +343,19 @@ index b713119..39e7f32 100644
|
|||||||
message thread_core_entry {
|
message thread_core_entry {
|
||||||
required uint64 futex_rla = 1;
|
required uint64 futex_rla = 1;
|
||||||
required uint32 futex_rla_len = 2;
|
required uint32 futex_rla_len = 2;
|
||||||
@@ -101,6 +105,7 @@ message thread_core_entry {
|
@@ -110,6 +114,7 @@ message thread_core_entry {
|
||||||
|
|
||||||
optional string comm = 13;
|
|
||||||
optional uint64 blk_sigset_extended = 14;
|
optional uint64 blk_sigset_extended = 14;
|
||||||
+ required thread_allowedcpus_entry allowed_cpus = 15;
|
optional rseq_entry rseq_entry = 15;
|
||||||
|
optional uint32 cg_set = 16;
|
||||||
|
+ required thread_allowedcpus_entry allowed_cpus = 17;
|
||||||
}
|
}
|
||||||
|
|
||||||
message task_rlimits_entry {
|
message task_rlimits_entry {
|
||||||
diff --git a/test/zdtm/static/Makefile b/test/zdtm/static/Makefile
|
diff --git a/test/zdtm/static/Makefile b/test/zdtm/static/Makefile
|
||||||
index c9e6589..70123cf 100644
|
index 07d3bc6..c25a46f 100644
|
||||||
--- a/test/zdtm/static/Makefile
|
--- a/test/zdtm/static/Makefile
|
||||||
+++ b/test/zdtm/static/Makefile
|
+++ b/test/zdtm/static/Makefile
|
||||||
@@ -246,6 +246,7 @@ TST_NOFILE := \
|
@@ -266,6 +266,7 @@ TST_NOFILE := \
|
||||||
timens_nested \
|
timens_nested \
|
||||||
timens_for_kids \
|
timens_for_kids \
|
||||||
zombie_leader \
|
zombie_leader \
|
||||||
@ -416,5 +419,5 @@ index 0000000..0d0b8ae
|
|||||||
@@ -0,0 +1 @@
|
@@ -0,0 +1 @@
|
||||||
+{'dopts': '', 'ropts': '--with-cpu-affinity', 'flags': 'reqrst '}
|
+{'dopts': '', 'ropts': '--with-cpu-affinity', 'flags': 'reqrst '}
|
||||||
--
|
--
|
||||||
2.27.0
|
2.33.0
|
||||||
|
|
||||||
|
|||||||
@ -1,36 +0,0 @@
|
|||||||
From 51533d98ac389711a704266a1a5d7afc9b267f2d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Andrei Vagin <avagin@gmail.com>
|
|
||||||
Date: Wed, 27 Apr 2022 06:51:47 +0300
|
|
||||||
Subject: [PATCH] page-pipe: fix limiting a pipe size
|
|
||||||
|
|
||||||
But actually, 5a92f100b88e probably has to be reverted as a whole.
|
|
||||||
PIPE_MAX_SIZE is the hard limit to avoid PAGE_ALLOC_COSTLY_ORDER
|
|
||||||
allocations in the kernel. But F_SETPIPE_SZ rounds up a requested pipe
|
|
||||||
size to a power-of-2 pages. It means that when we request PIPE_MAX_SIZE
|
|
||||||
that isn't a power-of-2 number, we actually request a pipe size greater
|
|
||||||
than PIPE_MAX_SIZE.
|
|
||||||
|
|
||||||
Fixes: 5a92f100b88e ("page-pipe: Resize up to PIPE_MAX_SIZE")
|
|
||||||
|
|
||||||
Signed-off-by: Andrei Vagin <avagin@gmail.com>
|
|
||||||
Signed-off-by: He Wenliang <hewenliang4@huawei.com>
|
|
||||||
---
|
|
||||||
criu/page-pipe.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/criu/page-pipe.c b/criu/page-pipe.c
|
|
||||||
index 5a7e50bc1..54dc3ccc4 100644
|
|
||||||
--- a/criu/page-pipe.c
|
|
||||||
+++ b/criu/page-pipe.c
|
|
||||||
@@ -56,7 +56,7 @@ static inline int ppb_resize_pipe(struct page_pipe_buf *ppb)
|
|
||||||
|
|
||||||
if (new_size > PIPE_MAX_SIZE) {
|
|
||||||
if (ppb->pipe_size < PIPE_MAX_SIZE)
|
|
||||||
- ppb->pipe_size = PIPE_MAX_SIZE;
|
|
||||||
+ new_size = PIPE_MAX_SIZE;
|
|
||||||
else
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,35 +0,0 @@
|
|||||||
From 485a83c110bef1b2700acec0bd63bad4518aa62f Mon Sep 17 00:00:00 2001
|
|
||||||
From: "fu.lin" <fulin10@huawei.com>
|
|
||||||
Date: Fri, 17 Sep 2021 17:16:48 +0800
|
|
||||||
Subject: [PATCH] tty: fix the null pointer of get_tty_driver
|
|
||||||
|
|
||||||
v2: split error checking from index variable initialization
|
|
||||||
v3: use PRIx64 for printing dev_t
|
|
||||||
|
|
||||||
Signed-off-by: fu.lin <fulin10@huawei.com>
|
|
||||||
Signed-off-by: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
|
|
||||||
Signed-off-by: He Wenliang <hewenliang4@huawei.com>
|
|
||||||
---
|
|
||||||
criu/tty.c | 6 ++++++
|
|
||||||
1 file changed, 6 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/criu/tty.c b/criu/tty.c
|
|
||||||
index 1598ad956..1462193c5 100644
|
|
||||||
--- a/criu/tty.c
|
|
||||||
+++ b/criu/tty.c
|
|
||||||
@@ -1977,6 +1977,12 @@ static int dump_one_tty(int lfd, u32 id, const struct fd_parms *p)
|
|
||||||
pr_info("Dumping tty %d with id %#x\n", lfd, id);
|
|
||||||
|
|
||||||
driver = get_tty_driver(p->stat.st_rdev, p->stat.st_dev);
|
|
||||||
+ if (driver == NULL) {
|
|
||||||
+ pr_err("Unable to find a tty driver (rdev %#" PRIx64 " dev %#" PRIx64 ")\n", p->stat.st_rdev,
|
|
||||||
+ p->stat.st_dev);
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (driver->fd_get_index)
|
|
||||||
index = driver->fd_get_index(lfd, p);
|
|
||||||
else
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,42 +0,0 @@
|
|||||||
From 74d1233b596c52ae8dc5da4730e6e3e48152023e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Rajneesh Bhardwaj <rajneesh.bhardwaj@amd.com>
|
|
||||||
Date: Tue, 27 Apr 2021 19:08:57 -0400
|
|
||||||
Subject: [PATCH] criu/files: Don't cache fd ids for device files
|
|
||||||
|
|
||||||
Restore operation fails when we perform CR operation of multiple
|
|
||||||
independent proceses that have device files because criu caches
|
|
||||||
the ids for the device files with same mnt_ids, inode pair. This
|
|
||||||
change ensures that even in case of a cached id found for a device, a
|
|
||||||
unique subid is generated and returned which is used for dumping.
|
|
||||||
|
|
||||||
Suggested-by: Andrei Vagin <avagin@gmail.com>
|
|
||||||
Signed-off-by: Rajneesh Bhardwaj <rajneesh.bhardwaj@amd.com>
|
|
||||||
Signed-off-by: He Wenliang <hewenliang4@huawei.com>
|
|
||||||
---
|
|
||||||
criu/file-ids.c | 10 ++++++++--
|
|
||||||
1 file changed, 8 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/criu/file-ids.c b/criu/file-ids.c
|
|
||||||
index 1b9d68888..772bd92cf 100644
|
|
||||||
--- a/criu/file-ids.c
|
|
||||||
+++ b/criu/file-ids.c
|
|
||||||
@@ -77,8 +77,14 @@ int fd_id_generate_special(struct fd_parms *p, u32 *id)
|
|
||||||
|
|
||||||
fi = fd_id_cache_lookup(p);
|
|
||||||
if (fi) {
|
|
||||||
- *id = fi->id;
|
|
||||||
- return 0;
|
|
||||||
+ if (p->stat.st_mode & (S_IFCHR | S_IFBLK)) {
|
|
||||||
+ /* Don't cache the id for mapped devices */
|
|
||||||
+ *id = fd_tree.subid++;
|
|
||||||
+ return 1;
|
|
||||||
+ } else {
|
|
||||||
+ *id = fi->id;
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,28 +0,0 @@
|
|||||||
From efeedf3912df4a9a13d5ac719700ca06a9dad327 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Andrei Vagin <avagin@gmail.com>
|
|
||||||
Date: Wed, 27 Apr 2022 07:02:58 +0300
|
|
||||||
Subject: [PATCH] pre-dump: call vmsplice with SPLICE_F_GIFT
|
|
||||||
|
|
||||||
In this case, vmplice attaches pages without coping them.
|
|
||||||
|
|
||||||
Signed-off-by: Andrei Vagin <avagin@gmail.com>
|
|
||||||
---
|
|
||||||
criu/page-xfer.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/criu/page-xfer.c b/criu/page-xfer.c
|
|
||||||
index 3d29fbf78..2a9f6e2cc 100644
|
|
||||||
--- a/criu/page-xfer.c
|
|
||||||
+++ b/criu/page-xfer.c
|
|
||||||
@@ -822,7 +822,7 @@ int page_xfer_predump_pages(int pid, struct page_xfer *xfer, struct page_pipe *p
|
|
||||||
|
|
||||||
bufvec.iov_base = userbuf;
|
|
||||||
bufvec.iov_len = bytes_read;
|
|
||||||
- ret = vmsplice(ppb->p[1], &bufvec, 1, SPLICE_F_NONBLOCK);
|
|
||||||
+ ret = vmsplice(ppb->p[1], &bufvec, 1, SPLICE_F_NONBLOCK | SPLICE_F_GIFT);
|
|
||||||
|
|
||||||
if (ret == -1 || ret != bytes_read) {
|
|
||||||
pr_err("vmsplice: Failed to splice user buffer to pipe %ld\n", ret);
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
Binary file not shown.
BIN
criu-3.19.tar.gz
Normal file
BIN
criu-3.19.tar.gz
Normal file
Binary file not shown.
26
criu.spec
26
criu.spec
@ -1,29 +1,23 @@
|
|||||||
Name: criu
|
Name: criu
|
||||||
Version: 3.16.1
|
Version: 3.19
|
||||||
Release: 9
|
Release: 1
|
||||||
Provides: crtools = %{version}-%{release}
|
Provides: crtools = %{version}-%{release}
|
||||||
Obsoletes: crtools <= 1.0-2
|
Obsoletes: crtools <= 1.0-2
|
||||||
Summary: A tool of Checkpoint/Restore in User-space
|
Summary: A tool of Checkpoint/Restore in User-space
|
||||||
License: GPL-2.0-or-later or LGPL-2.1-only
|
License: GPL-2.0-or-later or LGPL-2.1-only
|
||||||
URL: http://criu.org/
|
URL: http://criu.org/
|
||||||
Source0: http://github.com/checkpoint-restore/criu/archive/v%{version}/%{name}-%{version}.tar.gz
|
Source0: http://github.com/checkpoint-restore/criu/archive/v%{version}/%{name}-%{version}.tar.gz
|
||||||
BuildRequires: systemd libnet-devel asciidoc xmlto perl-interpreter libselinux-devel gcc
|
BuildRequires: systemd libnet-devel asciidoc xmlto perl-interpreter libselinux-devel gcc make
|
||||||
BuildRequires: protobuf-devel protobuf-c-devel python3-devel libnl3-devel libcap-devel
|
BuildRequires: protobuf-devel protobuf-c-devel python3-devel libnl3-devel libcap-devel
|
||||||
|
BuildRequires: python3-pip python3-setuptools python3-wheel python3-protobuf
|
||||||
Recommends: tar
|
Recommends: tar
|
||||||
ExclusiveArch: x86_64 %{arm} ppc64le aarch64 s390x
|
ExclusiveArch: x86_64 %{arm} ppc64le aarch64 s390x
|
||||||
Requires: %{name} = %{version}-%{release}
|
Requires: %{name} = %{version}-%{release}
|
||||||
Provides: %{name}-libs = %{version}-%{release}
|
Provides: %{name}-libs = %{version}-%{release}
|
||||||
Obsoletes: %{name}-libs < %{version}-%{release}
|
Obsoletes: %{name}-libs < %{version}-%{release}
|
||||||
|
|
||||||
Patch1: 0001-criu-dump-and-restore-cpu-affinity-of-each-thread.patch
|
Patch1: 0001-criu-dump-and-restore-cpu-affinity-of-each-thread.patch
|
||||||
Patch2: 0002-mm-add-pin-memory-method-for-criu.patch
|
|
||||||
Patch3: revert-fix-BUG-at-criu-pstree.c-452.patch
|
|
||||||
|
|
||||||
Patch1000: 1000-backport-page-pipe-fix-limiting-a-pipe-size.patch
|
|
||||||
Patch1001: 1001-backport-tty-fix-the-null-pointer-of-get_tty_driver.patch
|
|
||||||
Patch1002: 1002-backport-criu-files-Don-t-cache-fd-ids-for-device-files.patch
|
|
||||||
Patch1003: 1003-backport-pre-dump-call-vmsplice-with-SPLICE_F_GIFT.patch
|
|
||||||
|
|
||||||
%description
|
%description
|
||||||
Checkpoint/Restore in Userspace(CRIU),is a software tool for the linux operating system.
|
Checkpoint/Restore in Userspace(CRIU),is a software tool for the linux operating system.
|
||||||
Using this tool,it is possible to freeze a running application (or part of it) and
|
Using this tool,it is possible to freeze a running application (or part of it) and
|
||||||
@ -72,6 +66,7 @@ CFLAGS+=`echo %{optflags}` make V=1 WERROR=0 PREFIX=%{_prefix} RUNDIR=/run/criu
|
|||||||
|
|
||||||
%install
|
%install
|
||||||
make install-criu DESTDIR=%{buildroot} PREFIX=%{_prefix} LIBDIR=%{_libdir}
|
make install-criu DESTDIR=%{buildroot} PREFIX=%{_prefix} LIBDIR=%{_libdir}
|
||||||
|
make install-crit DESTDIR=%{buildroot} PREFIX=%{_prefix} LIBDIR=%{_libdir}
|
||||||
make install-lib DESTDIR=%{buildroot} PREFIX=%{_prefix} LIBDIR=%{_libdir} PYTHON=python3
|
make install-lib DESTDIR=%{buildroot} PREFIX=%{_prefix} LIBDIR=%{_libdir} PYTHON=python3
|
||||||
make install-man DESTDIR=%{buildroot} PREFIX=%{_prefix} LIBDIR=%{_libdir}
|
make install-man DESTDIR=%{buildroot} PREFIX=%{_prefix} LIBDIR=%{_libdir}
|
||||||
|
|
||||||
@ -91,10 +86,12 @@ chmod 0755 %{buildroot}/run/%{name}/
|
|||||||
%exclude %{_libdir}/libcriu.a
|
%exclude %{_libdir}/libcriu.a
|
||||||
|
|
||||||
%files -n python3-criu
|
%files -n python3-criu
|
||||||
%{python3_sitelib}/{pycriu/*,*egg-info}
|
%{python3_sitelib}/{pycriu*/*,*egg-info}
|
||||||
|
|
||||||
%files -n crit
|
%files -n crit
|
||||||
%{_bindir}/crit
|
%{_bindir}/crit
|
||||||
|
%{python3_sitelib}/crit-%{version}.dist-info/
|
||||||
|
%{python3_sitelib}/crit
|
||||||
|
|
||||||
%files -n criu-ns
|
%files -n criu-ns
|
||||||
%{_sbindir}/criu-ns
|
%{_sbindir}/criu-ns
|
||||||
@ -102,9 +99,12 @@ chmod 0755 %{buildroot}/run/%{name}/
|
|||||||
%files help
|
%files help
|
||||||
%doc README.md COPYING
|
%doc README.md COPYING
|
||||||
%doc %{_mandir}/man8/criu.8*
|
%doc %{_mandir}/man8/criu.8*
|
||||||
%doc %{_mandir}/man1/{compel.1*,crit.1*,criu-ns.1*}
|
%doc %{_mandir}/man1/{compel.1*,crit.1*,criu-ns.1*,criu-amdgpu-plugin.1*}
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Apr 25 2024 snoweay <snoweay@163.com> - 3.19-1
|
||||||
|
- update to version 3.19 from criu.org
|
||||||
|
|
||||||
* Mon Jun 19 2023 hewenliang <314264452@qq.com> - 3.16.1-9
|
* Mon Jun 19 2023 hewenliang <314264452@qq.com> - 3.16.1-9
|
||||||
- revert: fix BUG at criu/pstree.c:452
|
- revert: fix BUG at criu/pstree.c:452
|
||||||
|
|
||||||
|
|||||||
@ -1,90 +0,0 @@
|
|||||||
Subject: [PATCH 1/1] revert: fix BUG at criu/pstree.c:452
|
|
||||||
|
|
||||||
Not all the process which is dumped by criu is session leader, the
|
|
||||||
enhancing verification is annoying, because it causes many problems in
|
|
||||||
some testcases. Therefore, revert this bugfix.
|
|
||||||
|
|
||||||
If the bugfix is resumed, using `setsid` to start process is necessary,
|
|
||||||
and using `stdbuf -oL` to redirect standard output at the same time.
|
|
||||||
|
|
||||||
This bug detail sees #1332.
|
|
||||||
|
|
||||||
Revert "pstree: don't change sid/gid-s if current sid/gid is the same"
|
|
||||||
This reverts commit 90e03b1a1142ca40fb78de9eb04944ab51d06eeb.
|
|
||||||
|
|
||||||
Revert "pstree: check for pid collision before switching to new sid/gid"
|
|
||||||
This reverts commit 7e6a1a7011b404fbf0108b062bda118e9a696b60.
|
|
||||||
---
|
|
||||||
criu/pstree.c | 37 ++++++++++---------------------------
|
|
||||||
1 file changed, 10 insertions(+), 27 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/criu/pstree.c b/criu/pstree.c
|
|
||||||
index d5080e515..bf09c761c 100644
|
|
||||||
--- a/criu/pstree.c
|
|
||||||
+++ b/criu/pstree.c
|
|
||||||
@@ -340,7 +340,6 @@ static int prepare_pstree_for_shell_job(pid_t pid)
|
|
||||||
pid_t current_gid = getpgid(pid);
|
|
||||||
|
|
||||||
struct pstree_item *pi;
|
|
||||||
- struct pid *tmp;
|
|
||||||
|
|
||||||
pid_t old_sid;
|
|
||||||
pid_t old_gid;
|
|
||||||
@@ -348,7 +347,6 @@ static int prepare_pstree_for_shell_job(pid_t pid)
|
|
||||||
if (!opts.shell_job)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
- /* root_item is a session leader */
|
|
||||||
if (root_item->sid == vpid(root_item))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
@@ -370,37 +368,22 @@ static int prepare_pstree_for_shell_job(pid_t pid)
|
|
||||||
*/
|
|
||||||
|
|
||||||
old_sid = root_item->sid;
|
|
||||||
- if (old_sid != current_sid) {
|
|
||||||
- pr_info("Migrating process tree (SID %d->%d)\n", old_sid, current_sid);
|
|
||||||
|
|
||||||
- tmp = pstree_pid_by_virt(current_sid);
|
|
||||||
- if (tmp) {
|
|
||||||
- pr_err("Current sid %d intersects with pid (%d) in images\n", current_sid, tmp->state);
|
|
||||||
- return -1;
|
|
||||||
- }
|
|
||||||
+ pr_info("Migrating process tree (SID %d->%d)\n",
|
|
||||||
+ old_sid, current_sid);
|
|
||||||
|
|
||||||
- for_each_pstree_item(pi) {
|
|
||||||
- if (pi->sid == old_sid)
|
|
||||||
- pi->sid = current_sid;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- if (lookup_create_item(current_sid) == NULL)
|
|
||||||
- return -1;
|
|
||||||
+ for_each_pstree_item(pi) {
|
|
||||||
+ if (pi->sid == old_sid)
|
|
||||||
+ pi->sid = current_sid;
|
|
||||||
}
|
|
||||||
|
|
||||||
- /* root_item is a group leader */
|
|
||||||
- if (root_item->pgid == vpid(root_item))
|
|
||||||
- return 0;
|
|
||||||
-
|
|
||||||
old_gid = root_item->pgid;
|
|
||||||
- if (old_gid != current_gid) {
|
|
||||||
- pr_info("Migrating process tree (GID %d->%d)\n", old_gid, current_gid);
|
|
||||||
-
|
|
||||||
- tmp = pstree_pid_by_virt(current_gid);
|
|
||||||
- if (tmp) {
|
|
||||||
- pr_err("Current gid %d intersects with pid (%d) in images\n", current_gid, tmp->state);
|
|
||||||
+ if (old_gid != vpid(root_item)) {
|
|
||||||
+ if (lookup_create_item(current_sid) == NULL)
|
|
||||||
return -1;
|
|
||||||
- }
|
|
||||||
+
|
|
||||||
+ pr_info("Migrating process tree (GID %d->%d)\n",
|
|
||||||
+ old_gid, current_gid);
|
|
||||||
|
|
||||||
for_each_pstree_item(pi) {
|
|
||||||
if (pi->pgid == old_gid)
|
|
||||||
--
|
|
||||||
2.35.1
|
|
||||||
Loading…
x
Reference in New Issue
Block a user