mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-07-27 12:37:35 +00:00
cgroups: unify cgfsng_{un}freeze()
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
This commit is contained in:
parent
f1e0e31261
commit
ee3a77758d
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user