[CRIU] [PATCH 3/8] vzctl: transfer vps_res in env_stop

Kir Kolyshkin kir at openvz.org
Wed May 15 20:42:41 EDT 2013


On 05/15/2013 09:10 AM, Andrey Vagin wrote:
> It will be used to unlink a state file

Same here -- if you will rely on hardcoded directory, you won't need 
this patch at all.

>
> Signed-off-by: Andrey Vagin <avagin at openvz.org>
> ---
>   include/types.h    |  3 ++-
>   src/lib/env.c      | 18 +++++++++---------
>   src/lib/hooks_ct.c |  4 ++--
>   src/lib/hooks_vz.c |  2 +-
>   4 files changed, 14 insertions(+), 13 deletions(-)
>
> diff --git a/include/types.h b/include/types.h
> index 79e22ca..150b756 100644
> --- a/include/types.h
> +++ b/include/types.h
> @@ -90,6 +90,7 @@ struct dev_res;
>   struct cpu_param;
>   struct veth_dev;
>   struct meminfo_param;
> +struct vps_res;
>   
>   /** CT handler.
>    */
> @@ -99,7 +100,7 @@ typedef struct vps_handler {
>   	int can_join_pidns; /* can't enter otherwise */
>   	int (*is_run)(struct vps_handler *h, envid_t veid);
>   	int (*enter)(struct vps_handler *h, envid_t veid, const char *root, int flags);
> -	int (*destroy)(struct vps_handler *h, envid_t veid);
> +	int (*destroy)(struct vps_handler *h, envid_t veid, const struct vps_res *res);
>   	int (*env_create)(struct arg_start *arg);
>   	int (*setlimits)(struct vps_handler *h, envid_t, struct ub_struct *ub);
>   	int (*setcpus)(struct vps_handler *h, envid_t, struct cpu_param *cpu);
> diff --git a/src/lib/env.c b/src/lib/env.c
> index 7e9a923..1cf94a1 100644
> --- a/src/lib/env.c
> +++ b/src/lib/env.c
> @@ -45,7 +45,7 @@
>   #include "image.h"
>   #include "readelf.h"
>   
> -static int env_stop(vps_handler *h, envid_t veid, const char *root,
> +static int env_stop(vps_handler *h, envid_t veid, const vps_res *res,
>   		int stop_mode);
>   
>   /*
> @@ -687,7 +687,7 @@ err:
>   	}
>   	if (ret) {
>   		if (vps_is_run(h, veid))
> -			env_stop(h, veid, res->fs.root, M_KILL);
> +			env_stop(h, veid, res, M_KILL);
>   		/* restore original quota values */
>   		if (!ploop)
>   			vps_set_quota(veid, &res->dq);
> @@ -738,7 +738,7 @@ int vps_start(vps_handler *h, envid_t veid, vps_param *param,
>   	return ret;
>   }
>   
> -static int real_env_stop(vps_handler *h, envid_t veid, const char *vps_root,
> +static int real_env_stop(vps_handler *h, envid_t veid, const vps_res *res,
>   	int stop_mode)
>   {
>   	int ret;
> @@ -746,7 +746,7 @@ static int real_env_stop(vps_handler *h, envid_t veid, const char *vps_root,
>   	if ((ret = h->setcontext(veid)))
>   		return ret;
>   	close_fds(1, h->vzfd, -1);
> -	ret = h->enter(h, veid, vps_root, 0);
> +	ret = h->enter(h, veid, res->fs.root, 0);
>   	if (ret == VZ_VE_NOT_RUNNING)
>   		/* Ignore "VE not running" error here */
>   		return 0;
> @@ -809,7 +809,7 @@ static int wait_child(int pid, int ignore_kill)
>   	return ret;
>   }
>   
> -static int env_stop(vps_handler *h, envid_t veid, const char *root,
> +static int env_stop(vps_handler *h, envid_t veid, const vps_res *res,
>   		int stop_mode)
>   {
>   	int i, pid, ret, tout = 0;
> @@ -832,7 +832,7 @@ static int env_stop(vps_handler *h, envid_t veid, const char *root,
>   		ret = VZ_RESOURCE_ERROR;
>   		goto out;
>   	} else if (pid == 0) {
> -		ret = real_env_stop(h, veid, root, stop_mode);
> +		ret = real_env_stop(h, veid, res, stop_mode);
>   		exit(ret);
>   	}
>   	if (wait_child(pid, 0)) /* reboot/halt failed, retry with kill */
> @@ -848,7 +848,7 @@ static int env_stop(vps_handler *h, envid_t veid, const char *root,
>   
>   kill_vps:
>   	logger(0, 0, "Killing container ...");
> -	ret = h->destroy(h, veid);
> +	ret = h->destroy(h, veid, res);
>   	if (!is_vz_kernel(h))
>   		goto wait;
>   
> @@ -858,7 +858,7 @@ kill_vps:
>   		goto out;
>   
>   	} else if (pid == 0) {
> -		ret = real_env_stop(h, veid, root, M_KILL);
> +		ret = real_env_stop(h, veid, res, M_KILL);
>   		exit(ret);
>   	}
>   	ret = wait_child(pid, 1);
> @@ -924,7 +924,7 @@ int vps_stop(vps_handler *h, envid_t veid, vps_param *param, int stop_mode,
>   	if (is_vz_kernel(h))
>   		get_vps_ip(h, veid, &param->del_res.net.ip);
>   
> -	if ((ret = env_stop(h, veid, res->fs.root, stop_mode)))
> +	if ((ret = env_stop(h, veid, res, stop_mode)))
>   		goto end;
>   
>   	mod_cleanup(h, veid, action, param);
> diff --git a/src/lib/hooks_ct.c b/src/lib/hooks_ct.c
> index 184c26a..0d4e439 100644
> --- a/src/lib/hooks_ct.c
> +++ b/src/lib/hooks_ct.c
> @@ -75,7 +75,7 @@ static int ct_is_run(vps_handler *h, envid_t veid)
>   	return container_is_running(veid);
>   }
>   
> -static int ct_destroy(vps_handler *h, envid_t veid)
> +static int ct_destroy(vps_handler *h, envid_t veid, const vps_res *res)
>   {
>   	char ctpath[STR_SIZE];
>   	int ret;
> @@ -269,7 +269,7 @@ int ct_env_create(struct arg_start *arg)
>   	char ctpath[STR_SIZE];
>   
>   	/* non-fatal */
> -	if ((ret = ct_destroy(arg->h, arg->veid)))
> +	if ((ret = ct_destroy(arg->h, arg->veid, arg->res)))
>   		logger(0, 0, "Could not properly cleanup container: %s",
>   			container_error(ret));
>   
> diff --git a/src/lib/hooks_vz.c b/src/lib/hooks_vz.c
> index afbcd0f..9f3c401 100644
> --- a/src/lib/hooks_vz.c
> +++ b/src/lib/hooks_vz.c
> @@ -94,7 +94,7 @@ static int vz_enter(vps_handler *h, envid_t veid, const char *root, int flags)
>   	return ret;
>   }
>   
> -static int vz_destroy(vps_handler *h, envid_t veid)
> +static int vz_destroy(vps_handler *h, envid_t veid, const vps_res *res)
>   {
>   	/* Destroys automatically after reboot */
>   	return 0;



More information about the CRIU mailing list