Commit f11a0ce0 authored by Kirill Tkhai's avatar Kirill Tkhai Committed by Andrei Vagin

restore: Use vpid in log_init_by_pid() instead of getpid()

When task is in pid namespace, getpid() can't be used
to identify it. So, use vpid instead of that.

Also, move log_init_by_pid() above pid check.
Signed-off-by: 's avatarKirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: 's avatarAndrei Vagin <avagin@virtuozzo.com>
parent 2fe60818
...@@ -1550,6 +1550,10 @@ static int restore_task_with_children(void *_arg) ...@@ -1550,6 +1550,10 @@ static int restore_task_with_children(void *_arg)
if (ret) if (ret)
goto err; goto err;
ret = log_init_by_pid(vpid(current));
if (ret < 0)
goto err;
pid = getpid(); pid = getpid();
if (vpid(current) != pid) { if (vpid(current) != pid) {
pr_err("Pid %d do not match expected %d\n", pid, vpid(current)); pr_err("Pid %d do not match expected %d\n", pid, vpid(current));
...@@ -1557,10 +1561,6 @@ static int restore_task_with_children(void *_arg) ...@@ -1557,10 +1561,6 @@ static int restore_task_with_children(void *_arg)
goto err; goto err;
} }
ret = log_init_by_pid();
if (ret < 0)
goto err;
if (!(ca->clone_flags & CLONE_FILES)) { if (!(ca->clone_flags & CLONE_FILES)) {
ret = close_old_fds(); ret = close_old_fds();
if (ret) if (ret)
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
extern int log_init(const char *output); extern int log_init(const char *output);
extern void log_fini(void); extern void log_fini(void);
extern int log_init_by_pid(void); extern int log_init_by_pid(pid_t pid);
extern void log_closedir(void); extern void log_closedir(void);
extern int log_keep_err(void); extern int log_keep_err(void);
extern char *log_first_err(void); extern char *log_first_err(void);
......
...@@ -171,7 +171,7 @@ err: ...@@ -171,7 +171,7 @@ err:
return -1; return -1;
} }
int log_init_by_pid(void) int log_init_by_pid(pid_t pid)
{ {
char path[PATH_MAX]; char path[PATH_MAX];
...@@ -182,14 +182,14 @@ int log_init_by_pid(void) ...@@ -182,14 +182,14 @@ int log_init_by_pid(void)
reset_buf_off(); reset_buf_off();
if (!opts.log_file_per_pid) { if (!opts.log_file_per_pid) {
buf_off += snprintf(buffer + buf_off, sizeof buffer - buf_off, "%6d: ", getpid()); buf_off += snprintf(buffer + buf_off, sizeof buffer - buf_off, "%6d: ", pid);
return 0; return 0;
} }
if (!opts.output) if (!opts.output)
return 0; return 0;
snprintf(path, PATH_MAX, "%s.%d", opts.output, getpid()); snprintf(path, PATH_MAX, "%s.%d", opts.output, pid);
return log_init(path); return log_init(path);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment