2
0
mirror of https://github.com/checkpoint-restore/criu synced 2025-08-30 13:58:34 +00:00

restore: Don't mess with last_pid when restoring pidns init

When we fork a pidns init there's no need in specifying its pid,
as it will be autogenerated to 1. Clean the code not to mess with
the last_pid sysctl at all in that case, rather than just omitting
the write into it.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
Pavel Emelyanov
2012-08-14 14:09:20 +04:00
parent 6aaf65642b
commit 3ae36e700f

View File

@@ -496,7 +496,6 @@ struct cr_clone_arg {
static inline int fork_with_pid(struct pstree_item *item, unsigned long ns_clone_flags) static inline int fork_with_pid(struct pstree_item *item, unsigned long ns_clone_flags)
{ {
int ret = -1; int ret = -1;
char buf[32];
struct cr_clone_arg ca; struct cr_clone_arg ca;
void *stack; void *stack;
pid_t pid = item->pid.virt; pid_t pid = item->pid.virt;
@@ -510,25 +509,31 @@ static inline int fork_with_pid(struct pstree_item *item, unsigned long ns_clone
goto err; goto err;
} }
snprintf(buf, sizeof(buf), "%d", pid - 1);
ca.item = item; ca.item = item;
ca.clone_flags = ns_clone_flags; ca.clone_flags = ns_clone_flags;
ca.fd = open(LAST_PID_PATH, O_RDWR);
if (ca.fd < 0) {
pr_perror("%d: Can't open %s", pid, LAST_PID_PATH);
goto err;
}
if (flock(ca.fd, LOCK_EX)) {
pr_perror("%d: Can't lock %s", pid, LAST_PID_PATH);
goto err_close;
}
if (!(ca.clone_flags & CLONE_NEWPID)) { if (!(ca.clone_flags & CLONE_NEWPID)) {
char buf[32];
ca.fd = open(LAST_PID_PATH, O_RDWR);
if (ca.fd < 0) {
pr_perror("%d: Can't open %s", pid, LAST_PID_PATH);
goto err;
}
if (flock(ca.fd, LOCK_EX)) {
close(ca.fd);
pr_perror("%d: Can't lock %s", pid, LAST_PID_PATH);
goto err;
}
snprintf(buf, sizeof(buf), "%d", pid - 1);
if (write_img_buf(ca.fd, buf, strlen(buf))) if (write_img_buf(ca.fd, buf, strlen(buf)))
goto err_unlock; goto err_unlock;
} else } else {
ca.fd = -1;
BUG_ON(pid != 1); BUG_ON(pid != 1);
}
if (ca.clone_flags & CLONE_NEWNET) if (ca.clone_flags & CLONE_NEWNET)
/* /*
@@ -562,11 +567,12 @@ static inline int fork_with_pid(struct pstree_item *item, unsigned long ns_clone
} }
err_unlock: err_unlock:
if (flock(ca.fd, LOCK_UN)) if (ca.fd >= 0) {
pr_perror("%d: Can't unlock %s", pid, LAST_PID_PATH); if (flock(ca.fd, LOCK_UN))
pr_perror("%d: Can't unlock %s", pid, LAST_PID_PATH);
err_close: close(ca.fd);
close_safe(&ca.fd); }
err: err:
if (stack != MAP_FAILED) if (stack != MAP_FAILED)
munmap(stack, STACK_SIZE); munmap(stack, STACK_SIZE);