[CRIU] [PATCH 3/8] vzctl: transfer vps_res in env_stop
Andrey Vagin
avagin at openvz.org
Wed May 15 12:10:48 EDT 2013
It will be used to unlink a state file
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, ¶m->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;
--
1.8.2
More information about the CRIU
mailing list