[CRIU] [PATCH 01/10] Revert "memory: don't use parent memdump if detected possible pid reuse"
Pavel Tikhomirov
ptikhomirov at virtuozzo.com
Fri Apr 6 10:31:23 MSK 2018
This reverts commit ffd415a5b5b8a9ef8fb99904a3c9b04ecdb3052b.
Signed-off-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
---
criu/cr-dump.c | 36 ++++-----------------------------
criu/include/mem.h | 9 ++-------
criu/mem.c | 58 +-----------------------------------------------------
criu/stats.c | 2 +-
4 files changed, 8 insertions(+), 97 deletions(-)
diff --git a/criu/cr-dump.c b/criu/cr-dump.c
index 094d01648..9e8425504 100644
--- a/criu/cr-dump.c
+++ b/criu/cr-dump.c
@@ -1229,7 +1229,7 @@ static int assign_parasite_pids(struct pstree_item *item, struct parasite_dump_m
return 0;
}
-static int pre_dump_one_task(struct pstree_item *item, StatsEntry *parent_se)
+static int pre_dump_one_task(struct pstree_item *item)
{
pid_t pid = item->pid->real;
struct vm_area_list vmas;
@@ -1289,8 +1289,6 @@ static int pre_dump_one_task(struct pstree_item *item, StatsEntry *parent_se)
mdc.pre_dump = true;
mdc.lazy = false;
- mdc.stat = NULL;
- mdc.parent_se = parent_se;
ret = parasite_dump_pages_seized(item, &vmas, &mdc, parasite_ctl);
if (ret)
@@ -1309,7 +1307,7 @@ static int pre_dump_one_task(struct pstree_item *item, StatsEntry *parent_se)
goto err_free;
}
-static int dump_one_task(struct pstree_item *item, StatsEntry *parent_se)
+static int dump_one_task(struct pstree_item *item)
{
pid_t pid = item->pid->real;
struct vm_area_list vmas;
@@ -1450,8 +1448,6 @@ static int dump_one_task(struct pstree_item *item, StatsEntry *parent_se)
mdc.pre_dump = false;
mdc.lazy = opts.lazy_pages;
- mdc.stat = &pps_buf;
- mdc.parent_se = parent_se;
ret = parasite_dump_pages_seized(item, &vmas, &mdc, parasite_ctl);
if (ret)
@@ -1638,7 +1634,6 @@ static int cr_pre_dump_finish(int ret)
int cr_pre_dump_tasks(pid_t pid)
{
- StatsEntry *parent_se = NULL;
struct pstree_item *item;
int ret = -1;
@@ -1703,18 +1698,10 @@ int cr_pre_dump_tasks(pid_t pid)
if (collect_namespaces(false) < 0)
goto err;
- /* Errors handled later in detect_pid_reuse */
- parent_se = get_parent_stats();
-
for_each_pstree_item(item)
- if (pre_dump_one_task(item, parent_se))
+ if (pre_dump_one_task(item))
goto err;
- if (parent_se) {
- stats_entry__free_unpacked(parent_se, NULL);
- parent_se = NULL;
- }
-
ret = cr_dump_shmem();
if (ret)
goto err;
@@ -1724,9 +1711,6 @@ int cr_pre_dump_tasks(pid_t pid)
ret = 0;
err:
- if (parent_se)
- stats_entry__free_unpacked(parent_se, NULL);
-
return cr_pre_dump_finish(ret);
}
@@ -1847,7 +1831,6 @@ static int cr_dump_finish(int ret)
int cr_dump_tasks(pid_t pid)
{
InventoryEntry he = INVENTORY_ENTRY__INIT;
- StatsEntry *parent_se = NULL;
struct pstree_item *item;
int pre_dump_ret = 0;
int ret = -1;
@@ -1942,19 +1925,11 @@ int cr_dump_tasks(pid_t pid)
if (collect_seccomp_filters() < 0)
goto err;
- /* Errors handled later in detect_pid_reuse */
- parent_se = get_parent_stats();
-
for_each_pstree_item(item) {
- if (dump_one_task(item, parent_se))
+ if (dump_one_task(item))
goto err;
}
- if (parent_se) {
- stats_entry__free_unpacked(parent_se, NULL);
- parent_se = NULL;
- }
-
/*
* It may happen that a process has completed but its files in
* /proc/PID/ are still open by another process. If the PID has been
@@ -2010,8 +1985,5 @@ int cr_dump_tasks(pid_t pid)
if (ret)
goto err;
err:
- if (parent_se)
- stats_entry__free_unpacked(parent_se, NULL);
-
return cr_dump_finish(ret);
}
diff --git a/criu/include/mem.h b/criu/include/mem.h
index e61e175a8..bb897c599 100644
--- a/criu/include/mem.h
+++ b/criu/include/mem.h
@@ -4,9 +4,6 @@
#include <stdbool.h>
#include "int.h"
#include "vma.pb-c.h"
-#include "pid.h"
-#include "proc_parse.h"
-#include "stats.pb-c.h"
struct parasite_ctl;
struct vm_area_list;
@@ -15,10 +12,8 @@ struct pstree_item;
struct vma_area;
struct mem_dump_ctl {
- bool pre_dump;
- bool lazy;
- struct proc_pid_stat *stat;
- StatsEntry *parent_se;
+ bool pre_dump;
+ bool lazy;
};
extern bool vma_has_guard_gap_hidden(struct vma_area *vma);
diff --git a/criu/mem.c b/criu/mem.c
index 9ee50299b..4c6942a11 100644
--- a/criu/mem.c
+++ b/criu/mem.c
@@ -30,11 +30,9 @@
#include "fault-injection.h"
#include "prctl.h"
#include <compel/compel.h>
-#include "proc_parse.h"
#include "protobuf.h"
#include "images/pagemap.pb-c.h"
-#include "images/stats.pb-c.h"
static int task_reset_dirty_track(int pid)
{
@@ -292,51 +290,6 @@ static int xfer_pages(struct page_pipe *pp, struct page_xfer *xfer)
return ret;
}
-static int detect_pid_reuse(struct pstree_item *item,
- struct proc_pid_stat* pps,
- StatsEntry *parent_se)
-{
- struct proc_pid_stat pps_buf;
- unsigned long long tps; /* ticks per second */
- int ret;
-
- tps = sysconf(_SC_CLK_TCK);
- if (tps == -1) {
- pr_perror("Failed to get clock ticks via sysconf");
- return -1;
- }
-
- if (!pps) {
- pps = &pps_buf;
- ret = parse_pid_stat(item->pid->real, pps);
- if (ret < 0)
- return -1;
- }
-
- if (!parent_se) {
- pr_perror("No parent stats, for real error, please, " \
- "check warnings in get_parent_stats");
- return -1;
- }
-
- if (parent_se->dump->has_dump_uptime) {
- unsigned long long dump_ticks;
-
- dump_ticks = parent_se->dump->dump_uptime/(USEC_PER_SEC/tps);
-
- if (pps->start_time >= dump_ticks) {
- /* Print "*" if unsure */
- pr_warn("Pid reuse%s detected for pid %d\n",
- pps_buf.start_time == dump_ticks ? "*" : "",
- item->pid->real);
- return 1;
- }
- } else
- pr_warn_once("Parent image has no dump timestamp, " \
- "pid reuse detection is OFF!\n");
- return 0;
-}
-
static int __parasite_dump_pages_seized(struct pstree_item *item,
struct parasite_dump_pages_args *args,
struct vm_area_list *vma_area_list,
@@ -350,7 +303,6 @@ static int __parasite_dump_pages_seized(struct pstree_item *item,
int ret = -1;
unsigned cpp_flags = 0;
unsigned long pmc_size;
- int possible_pid_reuse = 0;
if (opts.check_only)
return 0;
@@ -408,14 +360,6 @@ static int __parasite_dump_pages_seized(struct pstree_item *item,
xfer.parent = NULL + 1;
}
- if (xfer.parent) {
- possible_pid_reuse = detect_pid_reuse(item, mdc->stat,
- mdc->parent_se);
- if (possible_pid_reuse == -1)
- goto out_xfer;
- }
-
-
/*
* Step 1 -- generate the pagemap
*/
@@ -442,7 +386,7 @@ static int __parasite_dump_pages_seized(struct pstree_item *item,
else {
again:
ret = generate_iovs(vma_area, pp, map, &off,
- has_parent && !possible_pid_reuse);
+ has_parent);
if (ret == -EAGAIN) {
BUG_ON(!(pp->flags & PP_CHUNK_MODE));
diff --git a/criu/stats.c b/criu/stats.c
index d344ad336..2c880102c 100644
--- a/criu/stats.c
+++ b/criu/stats.c
@@ -213,7 +213,7 @@ void write_stats(int what)
display_stats(what, &stats);
}
-StatsEntry *get_parent_stats(void)
+__maybe_unused StatsEntry *get_parent_stats(void)
{
struct cr_img *img;
StatsEntry *se;
--
2.14.3
More information about the CRIU
mailing list