]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
cgroup: refactor cgroup_xattr_apply()
authorLennart Poettering <lennart@poettering.net>
Fri, 6 Oct 2023 16:24:46 +0000 (18:24 +0200)
committerLennart Poettering <lennart@poettering.net>
Fri, 6 Oct 2023 16:24:50 +0000 (18:24 +0200)
Split the function up, so that each set of xattrs is applied separately.

src/core/cgroup.c

index 39e670091fc12adbc990a8e530f1da1d73d7f187..5f8407c480566ad8f5e7cba6a23f14e3f6b9d3d0 100644 (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;