[Devel] [PATCH 1/8] vzctl: save a pid of init in a state file

Andrey Vagin avagin at openvz.org
Wed May 15 09:10:46 PDT 2013


CRIU requires a pid of the init.

Signed-off-by: Andrey Vagin <avagin at openvz.org>
---
 etc/vz.conf.in        |  1 +
 include/res.h         |  1 +
 include/types.h       |  2 ++
 include/util.h        |  1 +
 include/vzctl_param.h |  1 +
 src/lib/config.c      | 10 ++++++++++
 src/lib/util.c        |  6 ++++++
 7 files changed, 22 insertions(+)

diff --git a/etc/vz.conf.in b/etc/vz.conf.in
index 07da9c7..25ab7d7 100644
--- a/etc/vz.conf.in
+++ b/etc/vz.conf.in
@@ -2,6 +2,7 @@
 VIRTUOZZO=yes
 LOCKDIR=@VZDIR@/lock
 DUMPDIR=@VZDIR@/dump
+STATEDIR=@VZDIR@/state
 VE0CPUUNITS=1000
 VE_STOP_MODE=suspend
 
diff --git a/include/res.h b/include/res.h
index 7060aef..814aec3 100644
--- a/include/res.h
+++ b/include/res.h
@@ -44,6 +44,7 @@ struct env_param {
 	unsigned long long features_mask;
 	unsigned long long features_known;
 	char *osrelease;
+	char *statedir;
 };
 typedef struct env_param env_param_t;
 
diff --git a/include/types.h b/include/types.h
index a4bce73..79e22ca 100644
--- a/include/types.h
+++ b/include/types.h
@@ -61,6 +61,8 @@ typedef unsigned envid_t;
 #define DEF_DUMPDIR	VZDIR "/dump"
 #define DEF_DUMPFILE	"Dump.%d"
 
+#define DEF_STATEDIR	VZDIR "/state"
+
 /* CT states */
 enum {
 	STATE_STARTING = 1,
diff --git a/include/util.h b/include/util.h
index 0f87e6e..7e12583 100644
--- a/include/util.h
+++ b/include/util.h
@@ -57,6 +57,7 @@ int get_num_cpu(void);
 int get_lowmem(unsigned long long *mem);
 unsigned long max_ul(unsigned long val1, unsigned long val2);
 int get_dump_file(unsigned veid, const char *dumpdir, char *buf, int size);
+int get_state_file(unsigned veid, const char *statedir, char *buf, int size);
 int set_not_blk(int fd);
 void close_fds(int close_std, ...);
 int move_config(int veid, int action);
diff --git a/include/vzctl_param.h b/include/vzctl_param.h
index 99eb655..49ca7fb 100644
--- a/include/vzctl_param.h
+++ b/include/vzctl_param.h
@@ -117,6 +117,7 @@
 #define PARAM_WAIT		346
 #define PARAM_IPV6NET		347
 #define PARAM_VETH_ADD		348
+#define PARAM_STATEDIR		349
 
 #define PARAM_FEATURES		350
 #define PARAM_NETIF_ADD		351
diff --git a/src/lib/config.c b/src/lib/config.c
index 617df6a..914f846 100644
--- a/src/lib/config.c
+++ b/src/lib/config.c
@@ -58,6 +58,7 @@ static vps_config config[] = {
 /*	Op	*/
 {"LOCKDIR",	NULL, PARAM_LOCKDIR},
 {"DUMPDIR",	NULL, PARAM_DUMPDIR},
+{"STATEDIR",	NULL, PARAM_STATEDIR},
 /*	Log	*/
 {"LOGGING",	NULL, PARAM_LOGGING},
 {"LOG_LEVEL",	NULL, PARAM_LOGLEVEL},
@@ -1968,6 +1969,9 @@ static int parse(envid_t veid, vps_param *vps_p, char *val, int id)
 	case PARAM_DUMPDIR:
 		ret = conf_parse_str(&vps_p->res.cpt.dumpdir, val);
 		break;
+	case PARAM_STATEDIR:
+		ret = conf_parse_str(&vps_p->res.env.statedir, val);
+		break;
 	case PARAM_LOGGING:
 		ret = conf_parse_yesno(&vps_p->log.enable, val);
 		break;
@@ -2735,6 +2739,11 @@ static void free_cpt(cpt_param *cpt)
 	FREE_P(cpt->dumpfile)
 }
 
+static void free_env(env_param_t *env)
+{
+	FREE_P(env->statedir)
+}
+
 static void free_name(name_param *name)
 {
 	FREE_P(name->name)
@@ -2743,6 +2752,7 @@ static void free_name(name_param *name)
 
 static void free_vps_res(vps_res *res)
 {
+	free_env(&res->env);
 	free_fs(&res->fs);
 	free_tmpl(&res->tmpl);
 	free_ub(&res->ub);
diff --git a/src/lib/util.c b/src/lib/util.c
index df410ff..90c4a9b 100644
--- a/src/lib/util.c
+++ b/src/lib/util.c
@@ -589,6 +589,12 @@ int get_dump_file(unsigned veid, const char *dumpdir, char *buf, int size)
 			dumpdir != NULL ? dumpdir : DEF_DUMPDIR, veid);
 }
 
+int get_state_file(unsigned veid, const char *statedir, char *buf, int size)
+{
+	return snprintf(buf, size, "%s/%d.pid",
+			statedir != NULL ? statedir : DEF_STATEDIR, veid);
+}
+
 int set_not_blk(int fd)
 {
 	int oldfl, ret;
-- 
1.8.2




More information about the Devel mailing list