Commit 45dc87b8 authored by Cyrill Gorcunov's avatar Cyrill Gorcunov Committed by Pavel Emelyanov

cg: Add ability to dump specified controllers only

For example in containers case there might be a number
of controllers mounted on the node which we should not
carry inside image when container is migrated. So
add ability to dump predefined controllers only
specified via command line --cgroup-dump-controller
option.
Signed-off-by: 's avatarCyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
parent 3b3e03c5
......@@ -477,12 +477,41 @@ err:
return ret;
}
static char **dump_controllers;
static size_t nr_dump_controllers;
bool cgp_add_dump_controller(const char *name)
{
if (xrealloc_safe(&dump_controllers, (nr_dump_controllers + 1) * sizeof(char *))) {
pr_err("Can't add controller \"%s\" to mark\n", name);
return false;
}
dump_controllers[nr_dump_controllers] = xstrdup(name);
if (!dump_controllers[nr_dump_controllers])
return false;
pr_debug("Mark controller \"%s\" to dump\n", name);
nr_dump_controllers++;
return true;
}
bool cgp_should_skip_controller(const char *name)
{
size_t i;
/*
* FIXME Implement!
* Dump all by default.
*/
return false;
if (!nr_dump_controllers)
return false;
for (i = 0; i < nr_dump_controllers; i++) {
if (!strcmp(name, dump_controllers[i]))
return false;
}
return true;
}
const cgp_t *cgp_get_props(const char *name)
......@@ -500,8 +529,14 @@ const cgp_t *cgp_get_props(const char *name)
void cgp_fini(void)
{
cgp_list_entry_t *p, *t;
size_t i;
list_for_each_entry_safe(p, t, &cgp_list, list)
cgp_free(p);
INIT_LIST_HEAD(&cgp_list);
for (i = 0; i < nr_dump_controllers; i++)
xfree(dump_controllers[i]);
xfree(dump_controllers);
nr_dump_controllers = 0;
}
......@@ -278,6 +278,7 @@ int main(int argc, char *argv[], char *envp[])
{ "all", no_argument, 0, 1079 },
{ "cgroup-props", required_argument, 0, 1080 },
{ "cgroup-props-file", required_argument, 0, 1081 },
{ "cgroup-dump-controller", required_argument, 0, 1082 },
{ },
};
......@@ -578,6 +579,10 @@ int main(int argc, char *argv[], char *envp[])
case 1081:
opts.cgroup_props_file = optarg;
break;
case 1082:
if (!cgp_add_dump_controller(optarg))
return 1;
break;
case 'V':
pr_msg("Version: %s\n", CRIU_VERSION);
if (strcmp(CRIU_GITID, "0"))
......@@ -822,6 +827,9 @@ usage:
" --cgroup-props-file FILE\n"
" same as --cgroup-props but taking descrition\n"
" from the path specified.\n"
" --cgroup-dump-controller NAME\n"
" define cgroup controller to be dumped\n"
" and skip anything else present in system.\n"
" --skip-mnt PATH ignore this mountpoint when dumping the mount namespace.\n"
" --enable-fs FSNAMES a comma separated list of filesystem names or \"all\".\n"
" force criu to (try to) dump/restore these filesystem's\n"
......
......@@ -12,6 +12,7 @@ typedef struct {
extern cgp_t cgp_global;
extern const cgp_t *cgp_get_props(const char *name);
extern bool cgp_should_skip_controller(const char *name);
extern bool cgp_add_dump_controller(const char *name);
extern int cgp_init(char *stream, size_t len, char *path);
extern void cgp_fini(void);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment