]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core: Do not check child freezability when thawing slice
authormsizanoen1 <msizanoen@qtmlabs.xyz>
Tue, 23 May 2023 11:46:26 +0000 (18:46 +0700)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 23 May 2023 21:22:41 +0000 (06:22 +0900)
We want thawing operations to still succeed even in the presence of an
unfreezable unit type (e.g. mount) appearing under a slice after the
slice was frozen. The appearance of such units should never cause the
slice thawing operation to fail to prevent potential future repeats of
https://github.com/systemd/systemd/issues/25356.

src/core/slice.c

index eb0ba5e763d6db5c3b6352043ee335c080a9f9da..a11ec62724b656e7b1e9bbd64c8d33ef4770d486 100644 (file)
@@ -375,7 +375,7 @@ static int slice_freezer_action(Unit *s, FreezerAction action) {
         assert(s);
         assert(IN_SET(action, FREEZER_FREEZE, FREEZER_THAW));
 
-        if (!slice_freezer_action_supported_by_children(s)) {
+        if (action == FREEZER_FREEZE && !slice_freezer_action_supported_by_children(s)) {
                 log_unit_warning(s, "Requested freezer operation is not supported by all children of the slice");
                 return 0;
         }
@@ -386,8 +386,11 @@ static int slice_freezer_action(Unit *s, FreezerAction action) {
 
                 if (action == FREEZER_FREEZE)
                         r = UNIT_VTABLE(member)->freeze(member);
-                else
+                else if (UNIT_VTABLE(member)->thaw)
                         r = UNIT_VTABLE(member)->thaw(member);
+                else
+                        /* Thawing is requested but no corresponding method is available, ignore. */
+                        r = 0;
                 if (r < 0)
                         return r;
         }