]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
user: move "extrinsic" units to their root slice 16603/head
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 5 Nov 2020 12:59:17 +0000 (13:59 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 10 Nov 2020 16:33:32 +0000 (17:33 +0100)
With the grandparent change to move most units to app.slice,
those units would be ordered After=app.slice which doesn't make any sense.
Actually they appear earlier, before the manager is even started, and
conceputally it doesn't seem useful to put them under any slice.

src/core/unit.c

index f80d9f4099871f5e6319ca8278154e3be61c0a27..e87b951d9fa323dabb9928bd15611aa892bf0a1e 100644 (file)
@@ -3350,15 +3350,16 @@ int unit_set_default_slice(Unit *u) {
                         slice_name = strjoina("system-", escaped, ".slice");
                 else
                         slice_name = strjoina("app-", escaped, ".slice");
-        } else {
-                if (MANAGER_IS_SYSTEM(u->manager))
-                        slice_name =
-                                unit_has_name(u, SPECIAL_INIT_SCOPE)
-                                ? SPECIAL_ROOT_SLICE
-                                : SPECIAL_SYSTEM_SLICE;
-                else
-                        slice_name = SPECIAL_APP_SLICE;
-        }
+
+        } else if (unit_is_extrinsic(u))
+                /* Keep all extrinsic units (e.g. perpetual units and swap and mount units in user mode) in
+                 * the root slice. They don't really belong in one of the subslices. */
+                slice_name = SPECIAL_ROOT_SLICE;
+
+        else if (MANAGER_IS_SYSTEM(u->manager))
+                slice_name = SPECIAL_SYSTEM_SLICE;
+        else
+                slice_name = SPECIAL_APP_SLICE;
 
         r = manager_load_unit(u->manager, slice_name, NULL, NULL, &slice);
         if (r < 0)