mirror of
https://github.com/checkpoint-restore/criu.git
synced 2026-07-18 00:58:31 +00:00
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: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
This commit is contained in:
parent
3b3e03c557
commit
45dc87b819
3 changed files with 46 additions and 2 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue