[CRIU] [PATCH 3/5] restore: collect cores and save them on pstree_item
Pavel Emelyanov
xemul at parallels.com
Wed Dec 26 04:18:10 EST 2012
On 12/25/2012 05:10 PM, Andrey Vagin wrote:
> They are used for determining shared fd tables.
>
> Signed-off-by: Andrey Vagin <avagin at openvz.org>
> ---
> cr-restore.c | 15 ++-------------
> include/pstree.h | 3 +++
> pstree.c | 14 +++++++++++++-
> 3 files changed, 18 insertions(+), 14 deletions(-)
>
> diff --git a/cr-restore.c b/cr-restore.c
> index a2d8911..b3e9572 100644
> --- a/cr-restore.c
> +++ b/cr-restore.c
> @@ -732,18 +732,8 @@ out:
>
> static int restore_one_task(int pid)
> {
> - int fd, ret;
> - CoreEntry *core;
> -
> - fd = open_image_ro(CR_FD_CORE, pid);
> - if (fd < 0)
> - return -1;
> -
> - ret = pb_read_one(fd, &core, PB_CORE);
> - close(fd);
> -
> - if (ret < 0)
> - return -1;
> + int ret;
> + CoreEntry *core = current->core;
>
> if (check_core(core)) {
> ret = -1;
> @@ -764,7 +754,6 @@ static int restore_one_task(int pid)
> }
>
> out:
> - core_entry__free_unpacked(core, NULL);
> return ret;
> }
>
> diff --git a/include/pstree.h b/include/pstree.h
> index ff0bd11..e9e01ce 100644
> --- a/include/pstree.h
> +++ b/include/pstree.h
> @@ -2,6 +2,7 @@
> #define __CR_PSTREE_H__
> #include "list.h"
> #include "crtools.h"
> +#include "../protobuf/core.pb-c.h"
>
> /*
> * That's the init process which usually inherit
> @@ -40,6 +41,8 @@ struct pstree_item {
> int nr_threads; /* number of threads */
> struct pid *threads; /* array of threads */
>
> + CoreEntry *core;
> +
> struct rst_info rst[0];
> };
>
> diff --git a/pstree.c b/pstree.c
> index 3ba645e..c9a402e 100644
> --- a/pstree.c
> +++ b/pstree.c
> @@ -177,7 +177,7 @@ static int prepare_pstree_for_shell_job(void)
>
> static int read_pstree_image(void)
> {
> - int ret = 0, i, ps_fd;
> + int ret = 0, i, ps_fd, core_fd;
> struct pstree_item *pi, *parent = NULL;
>
> pr_info("Reading image tree\n");
> @@ -260,6 +260,18 @@ static int read_pstree_image(void)
> task_entries->nr_tasks++;
>
> pstree_entry__free_unpacked(e, NULL);
> +
> + ret = -1;
> + core_fd = open_image_ro(CR_FD_CORE, pi->pid.virt);
> + if (core_fd < 0)
> + break;
> +
> + ret = pb_read_one(core_fd, &pi->core, PB_CORE);
> + close(core_fd);
> + if (ret < 0)
> + break;
> +
> + pi->state = pi->core->tc->task_state;
Let's better put kobj-ids into separate image file and leave it NULL
in the core image (as it is now).
> }
> err:
> close(ps_fd);
>
More information about the CRIU
mailing list