Commit eec3f49b authored by Kirill Tkhai's avatar Kirill Tkhai Committed by Pavel Emelyanov

dump: Allocate root_item before run pre-dump scripts

This allows pre-dump scripts to know CT root_item pid
and enter into its namespaces.
Signed-off-by: 's avatarKirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
parent b734cd40
...@@ -1471,6 +1471,11 @@ int cr_pre_dump_tasks(pid_t pid) ...@@ -1471,6 +1471,11 @@ int cr_pre_dump_tasks(pid_t pid)
int ret = -1; int ret = -1;
LIST_HEAD(ctls); LIST_HEAD(ctls);
root_item = alloc_pstree_item();
if (!root_item)
goto err;
root_item->pid.real = pid;
if (!opts.track_mem) { if (!opts.track_mem) {
pr_info("Enforcing memory tracking for pre-dump.\n"); pr_info("Enforcing memory tracking for pre-dump.\n");
opts.track_mem = true; opts.track_mem = true;
...@@ -1505,7 +1510,7 @@ int cr_pre_dump_tasks(pid_t pid) ...@@ -1505,7 +1510,7 @@ int cr_pre_dump_tasks(pid_t pid)
if (setup_alarm_handler()) if (setup_alarm_handler())
goto err; goto err;
if (collect_pstree(pid)) if (collect_pstree())
goto err; goto err;
if (collect_pstree_ids_predump()) if (collect_pstree_ids_predump())
...@@ -1616,6 +1621,11 @@ int cr_dump_tasks(pid_t pid) ...@@ -1616,6 +1621,11 @@ int cr_dump_tasks(pid_t pid)
pr_info("Dumping processes (pid: %d)\n", pid); pr_info("Dumping processes (pid: %d)\n", pid);
pr_info("========================================\n"); pr_info("========================================\n");
root_item = alloc_pstree_item();
if (!root_item)
goto err;
root_item->pid.real = pid;
pre_dump_ret = run_scripts(ACT_PRE_DUMP); pre_dump_ret = run_scripts(ACT_PRE_DUMP);
if (pre_dump_ret != 0) { if (pre_dump_ret != 0) {
pr_err("Pre dump script failed with %d!\n", pre_dump_ret); pr_err("Pre dump script failed with %d!\n", pre_dump_ret);
...@@ -1668,7 +1678,7 @@ int cr_dump_tasks(pid_t pid) ...@@ -1668,7 +1678,7 @@ int cr_dump_tasks(pid_t pid)
* afterwards. * afterwards.
*/ */
if (collect_pstree(pid)) if (collect_pstree())
goto err; goto err;
if (collect_pstree_ids()) if (collect_pstree_ids())
......
#ifndef __CR_SEIZE_H__ #ifndef __CR_SEIZE_H__
#define __CR_SEIZE_H__ #define __CR_SEIZE_H__
extern int collect_pstree(pid_t pid); extern int collect_pstree(void);
extern void pstree_switch_state(struct pstree_item *root_item, int st); extern void pstree_switch_state(struct pstree_item *root_item, int st);
extern const char *get_real_freezer_state(void); extern const char *get_real_freezer_state(void);
extern bool alarm_timeouted(void); extern bool alarm_timeouted(void);
......
...@@ -650,8 +650,9 @@ err_close: ...@@ -650,8 +650,9 @@ err_close:
return -1; return -1;
} }
int collect_pstree(pid_t pid) int collect_pstree(void)
{ {
pid_t pid = root_item->pid.real;
int ret = -1; int ret = -1;
timing_start(TIME_FREEZING); timing_start(TIME_FREEZING);
...@@ -666,12 +667,6 @@ int collect_pstree(pid_t pid) ...@@ -666,12 +667,6 @@ int collect_pstree(pid_t pid)
if (opts.freeze_cgroup && freeze_processes()) if (opts.freeze_cgroup && freeze_processes())
goto err; goto err;
root_item = alloc_pstree_item();
if (root_item == NULL)
goto err;
root_item->pid.real = pid;
if (!opts.freeze_cgroup && seize_catch_task(pid)) { if (!opts.freeze_cgroup && seize_catch_task(pid)) {
set_cr_errno(ESRCH); set_cr_errno(ESRCH);
goto err; goto err;
......
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