From: Michael Tremer Date: Sat, 22 Feb 2025 20:28:16 +0000 (+0000) Subject: build: Ignore cgroups if they are not fully functional X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0dd803e8caaad29ebc5093e6dd3cc1ac4b01d3ec;p=pakfire.git build: Ignore cgroups if they are not fully functional This is an experimental change to see how this will all turn out on Jenkins. Signed-off-by: Michael Tremer --- diff --git a/src/pakfire/build.c b/src/pakfire/build.c index be6e6e45..9caf2d50 100644 --- a/src/pakfire/build.c +++ b/src/pakfire/build.c @@ -1842,9 +1842,16 @@ static int pakfire_build_setup_jail(struct pakfire_build* build) { // Connect the jail to our cgroup r = pakfire_jail_set_cgroup(build->jail, build->cgroup); - if (r) { - ERROR(build->ctx, "Could not set cgroup for jail: %m\n"); - return r; + if (r < 0) { + switch (-r) { + case EINVAL: + ERROR(build->ctx, "cgroup cannot be used. Ignoring.\n"); + break; + + default: + ERROR(build->ctx, "Could not set cgroup for jail: %m\n"); + return r; + } } // Build everything with a slightly lower priority diff --git a/src/pakfire/cgroup.c b/src/pakfire/cgroup.c index 5531bd98..8f9d61ca 100644 --- a/src/pakfire/cgroup.c +++ b/src/pakfire/cgroup.c @@ -522,6 +522,13 @@ struct pakfire_cgroup* pakfire_cgroup_unref(struct pakfire_cgroup* cgroup) { return NULL; } +int pakfire_cgroup_is_valid(struct pakfire_cgroup* self) { + if (self->controllers) + return 1; + + return 0; +} + int pakfire_cgroup_child(struct pakfire_cgroup** child, struct pakfire_cgroup* cgroup, const char* path, int flags) { return pakfire_cgroup_open(child, cgroup->ctx, cgroup, path, flags); diff --git a/src/pakfire/cgroup.h b/src/pakfire/cgroup.h index 3d7f067a..37c8863b 100644 --- a/src/pakfire/cgroup.h +++ b/src/pakfire/cgroup.h @@ -206,6 +206,8 @@ int pakfire_cgroup_create(struct pakfire_cgroup** cgroup, struct pakfire_cgroup* pakfire_cgroup_ref(struct pakfire_cgroup* cgroup); struct pakfire_cgroup* pakfire_cgroup_unref(struct pakfire_cgroup* cgroup); +int pakfire_cgroup_is_valid(struct pakfire_cgroup* self); + int pakfire_cgroup_child(struct pakfire_cgroup** child, struct pakfire_cgroup* cgroup, const char* path, int flags); diff --git a/src/pakfire/jail.c b/src/pakfire/jail.c index 07603e20..c3951249 100644 --- a/src/pakfire/jail.c +++ b/src/pakfire/jail.c @@ -289,6 +289,10 @@ int pakfire_jail_set_cgroup(struct pakfire_jail* jail, struct pakfire_cgroup* cg if (cgroup) { DEBUG(jail->ctx, "Setting cgroup %p\n", cgroup); + // Don't accept the cgroup if it is in an invalid state + if (!pakfire_cgroup_is_valid(cgroup)) + return -EINVAL; + jail->cgroup = pakfire_cgroup_ref(cgroup); }