cgroup: refactor cgroup_xattr_apply()

Split the function up, so that each set of xattrs is applied separately.
This commit is contained in:
Lennart Poettering
2023-10-06 18:24:50 +02:00
parent 17d047f507
commit d46510de2f
+28 -9
View File
@@ -878,19 +878,11 @@ int cgroup_log_xattr_apply(Unit *u) {
return 0;
}
static void cgroup_xattr_apply(Unit *u) {
static void cgroup_invocation_id_xattr_apply(Unit *u) {
bool b;
int r;
assert(u);
/* The 'user.*' xattrs can be set from a user manager. */
cgroup_oomd_xattr_apply(u);
cgroup_log_xattr_apply(u);
if (!MANAGER_IS_SYSTEM(u->manager))
return;
b = !sd_id128_is_null(u->invocation_id);
FOREACH_STRING(xn, "trusted.invocation_id", "user.invocation_id") {
if (b)
@@ -898,6 +890,12 @@ static void cgroup_xattr_apply(Unit *u) {
else
unit_remove_xattr_graceful(u, xn);
}
}
static void cgroup_delegate_xattr_apply(Unit *u) {
bool b;
assert(u);
/* Indicate on the cgroup whether delegation is on, via an xattr. This is best-effort, as old kernels
* didn't support xattrs on cgroups at all. Later they got support for setting 'trusted.*' xattrs,
@@ -914,6 +912,12 @@ static void cgroup_xattr_apply(Unit *u) {
else
unit_remove_xattr_graceful(u, xn);
}
}
static void cgroup_survive_xattr_apply(Unit *u) {
int r;
assert(u);
if (u->survive_final_kill_signal) {
r = cg_set_xattr(
@@ -942,6 +946,21 @@ static void cgroup_xattr_apply(Unit *u) {
}
}
static void cgroup_xattr_apply(Unit *u) {
assert(u);
/* The 'user.*' xattrs can be set from a user manager. */
cgroup_oomd_xattr_apply(u);
cgroup_log_xattr_apply(u);
if (!MANAGER_IS_SYSTEM(u->manager))
return;
cgroup_invocation_id_xattr_apply(u);
cgroup_delegate_xattr_apply(u);
cgroup_survive_xattr_apply(u);
}
static int lookup_block_device(const char *p, dev_t *ret) {
dev_t rdev, dev = 0;
mode_t mode;