cgroups: unify cgfsng_{un}freeze()

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
This commit is contained in:
Christian Brauner 2019-09-02 23:51:19 +02:00
parent f1e0e31261
commit ee3a77758d
No known key found for this signature in database
GPG Key ID: 8EB056D53EECB12D

View File

@ -1995,40 +1995,38 @@ again:
return (pfd.revents & POLLIN); return (pfd.revents & POLLIN);
} }
__cgfsng_ops static bool cgfsng_freeze(struct cgroup_ops *ops) static bool cg_legacy_freeze(struct cgroup_ops *ops)
{
__do_free char *path = NULL;
struct hierarchy *h;
h = get_hierarchy(ops, "freezer");
if (!h)
return false;
path = must_make_path(h->container_full_path, "freezer.state", NULL);
return lxc_write_to_file(path, "FROZEN", STRLITERALLEN("FROZEN"), false,
0666) == 0;
}
static bool cg_unified_freeze(struct cgroup_ops *ops)
{ {
int ret; int ret;
__do_close_prot_errno int fd = -EBADF; __do_close_prot_errno int fd = -EBADF;
__do_free char *events_file = NULL, *fullpath = NULL, *line = NULL; __do_free char *events_file = NULL, *path = NULL, *line = NULL;
__do_fclose FILE *f = NULL; __do_fclose FILE *f = NULL;
struct hierarchy *h; struct hierarchy *h;
if (!ops->hierarchies)
return true;
if (ops->cgroup_layout != CGROUP_LAYOUT_UNIFIED) {
h = get_hierarchy(ops, "freezer");
if (!h)
return false;
fullpath = must_make_path(h->container_full_path,
"freezer.state", NULL);
return lxc_write_to_file(fullpath, "FROZEN",
STRLITERALLEN("FROZEN"), false,
0666) == 0;
}
h = ops->unified; h = ops->unified;
if (!h) if (!h)
return false; return false;
fullpath = must_make_path(h->container_full_path, "cgroup.freeze", NULL); path = must_make_path(h->container_full_path, "cgroup.freeze", NULL);
ret = lxc_write_to_file(fullpath, "1", 1, false, 0666); ret = lxc_write_to_file(path, "1", 1, false, 0666);
if (ret < 0) if (ret < 0)
return false; return false;
events_file = events_file = must_make_path(h->container_full_path, "cgroup.events", NULL);
must_make_path(h->container_full_path, "cgroup.events", NULL);
fd = open(events_file, O_RDONLY | O_CLOEXEC); fd = open(events_file, O_RDONLY | O_CLOEXEC);
if (fd < 0) if (fd < 0)
return false; return false;
@ -2052,32 +2050,53 @@ __cgfsng_ops static bool cgfsng_freeze(struct cgroup_ops *ops)
return false; return false;
} }
__cgfsng_ops static bool cgfsng_unfreeze(struct cgroup_ops *ops) __cgfsng_ops static bool cgfsng_freeze(struct cgroup_ops *ops)
{ {
__do_free char *fullpath = NULL;
struct hierarchy *h;
if (!ops->hierarchies) if (!ops->hierarchies)
return true; return true;
if (ops->cgroup_layout != CGROUP_LAYOUT_UNIFIED) { if (ops->cgroup_layout != CGROUP_LAYOUT_UNIFIED)
h = get_hierarchy(ops, "freezer"); return cg_legacy_freeze(ops);
if (!h)
return false;
fullpath = must_make_path(h->container_full_path, return cg_unified_freeze(ops);
"freezer.state", NULL); }
return lxc_write_to_file(fullpath, "THAWED",
STRLITERALLEN("THAWED"), false, static bool cg_legacy_unfreeze(struct cgroup_ops *ops)
0666) == 0; {
} __do_free char *path = NULL;
struct hierarchy *h;
h = get_hierarchy(ops, "freezer");
if (!h)
return false;
path = must_make_path(h->container_full_path, "freezer.state", NULL);
return lxc_write_to_file(path, "THAWED", STRLITERALLEN("THAWED"), false,
0666) == 0;
}
static bool cg_unified_unfreeze(struct cgroup_ops *ops)
{
__do_free char *path = NULL;
struct hierarchy *h;
h = ops->unified; h = ops->unified;
if (!h) if (!h)
return false; return false;
fullpath = must_make_path(h->container_full_path, "cgroup.freeze", NULL); path = must_make_path(h->container_full_path, "cgroup.freeze", NULL);
return lxc_write_to_file(fullpath, "0", 1, false, 0666) == 0; return lxc_write_to_file(path, "0", 1, false, 0666) == 0;
}
__cgfsng_ops static bool cgfsng_unfreeze(struct cgroup_ops *ops)
{
if (!ops->hierarchies)
return true;
if (ops->cgroup_layout != CGROUP_LAYOUT_UNIFIED)
return cg_legacy_unfreeze(ops);
return cg_unified_unfreeze(ops);
} }
__cgfsng_ops static const char *cgfsng_get_cgroup(struct cgroup_ops *ops, __cgfsng_ops static const char *cgfsng_get_cgroup(struct cgroup_ops *ops,