]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core/cgroup: obsolete DefaultMemoryMin/Low= 40384/head
authorMike Yuan <me@yhndnzj.com>
Sat, 17 Jan 2026 00:21:34 +0000 (01:21 +0100)
committerMike Yuan <me@yhndnzj.com>
Mon, 19 Jan 2026 12:33:28 +0000 (13:33 +0100)
Now that our kernel baseline is v5.7 and memory_recursiveprot
is universally enabled, remove userspace workarounds.

28 files changed:
TODO
man/org.freedesktop.systemd1.xml
man/systemd.resource-control.xml
src/core/cgroup.c
src/core/cgroup.h
src/core/dbus-cgroup.c
src/core/execute-serialize.c
src/core/load-fragment-gperf.gperf.in
src/core/load-fragment.c
src/core/varlink-cgroup.c
src/shared/bus-get-properties.c
src/shared/bus-get-properties.h
src/shared/bus-unit-util.c
src/shared/varlink-io.systemd.Unit.c
src/systemctl/systemctl-show.c
src/test/meson.build
src/test/test-cgroup-unit-default.c [deleted file]
test/meson.build
test/test-cgroup-unit-default/dml-discard-empty.service [deleted file]
test/test-cgroup-unit-default/dml-discard-set-ml.service [deleted file]
test/test-cgroup-unit-default/dml-discard.slice [deleted file]
test/test-cgroup-unit-default/dml-override-empty.service [deleted file]
test/test-cgroup-unit-default/dml-override.slice [deleted file]
test/test-cgroup-unit-default/dml-passthrough-empty.service [deleted file]
test/test-cgroup-unit-default/dml-passthrough-set-dml.service [deleted file]
test/test-cgroup-unit-default/dml-passthrough-set-ml.service [deleted file]
test/test-cgroup-unit-default/dml-passthrough.slice [deleted file]
test/test-cgroup-unit-default/dml.slice [deleted file]

diff --git a/TODO b/TODO
index e24eade38166fb6becf0f226c970646d6bb5493a..d45ee30dc94fae9203cfc7391a712095b6604923 100644 (file)
--- a/TODO
+++ b/TODO
@@ -120,10 +120,6 @@ Deprecations and removals:
   https://github.com/util-linux/util-linux/commit/508fb0e7ac103b68531a59db2a4473897853ab52
   has hit the prominent distributions, revert --issue-file= hack in units/*getty*service.in
 
-* Once kernel baseline is 5.7, obsolete DefaultMemoryMin/Low= and DefaultStartupMemoryLow=
-  since we can systematically enable memory_recursiveprot on cgroupfs and have those
-  enforced by the kernel
-
 Features:
 
 * systemd-sysupdate: add support a "best before" in manifests (ie. SHA256SUMS)
index 7a65bfa809cca09c312811c9f0a5dae15d012505..e6c2c6fdab8233899a1923d955a3d7fb7c22dbdc 100644 (file)
@@ -2969,12 +2969,6 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice {
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly b MemoryAccounting = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
-      readonly t DefaultMemoryLow = ...;
-      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
-      readonly t DefaultStartupMemoryLow = ...;
-      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
-      readonly t DefaultMemoryMin = ...;
-      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryMin = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryLow = ...;
@@ -3642,12 +3636,6 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice {
 
     <!--property MemoryAccounting is not documented!-->
 
-    <!--property DefaultMemoryLow is not documented!-->
-
-    <!--property DefaultStartupMemoryLow is not documented!-->
-
-    <!--property DefaultMemoryMin is not documented!-->
-
     <!--property MemoryMin is not documented!-->
 
     <!--property MemoryLow is not documented!-->
@@ -4336,12 +4324,6 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice {
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryAccounting"/>
 
-    <variablelist class="dbus-property" generated="True" extra-ref="DefaultMemoryLow"/>
-
-    <variablelist class="dbus-property" generated="True" extra-ref="DefaultStartupMemoryLow"/>
-
-    <variablelist class="dbus-property" generated="True" extra-ref="DefaultMemoryMin"/>
-
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryMin"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryLow"/>
@@ -5238,12 +5220,6 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2esocket {
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly b MemoryAccounting = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
-      readonly t DefaultMemoryLow = ...;
-      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
-      readonly t DefaultStartupMemoryLow = ...;
-      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
-      readonly t DefaultMemoryMin = ...;
-      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryMin = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryLow = ...;
@@ -5929,12 +5905,6 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2esocket {
 
     <!--property MemoryAccounting is not documented!-->
 
-    <!--property DefaultMemoryLow is not documented!-->
-
-    <!--property DefaultStartupMemoryLow is not documented!-->
-
-    <!--property DefaultMemoryMin is not documented!-->
-
     <!--property MemoryMin is not documented!-->
 
     <!--property MemoryLow is not documented!-->
@@ -6599,12 +6569,6 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2esocket {
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryAccounting"/>
 
-    <variablelist class="dbus-property" generated="True" extra-ref="DefaultMemoryLow"/>
-
-    <variablelist class="dbus-property" generated="True" extra-ref="DefaultStartupMemoryLow"/>
-
-    <variablelist class="dbus-property" generated="True" extra-ref="DefaultMemoryMin"/>
-
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryMin"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryLow"/>
@@ -7325,12 +7289,6 @@ node /org/freedesktop/systemd1/unit/home_2emount {
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly b MemoryAccounting = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
-      readonly t DefaultMemoryLow = ...;
-      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
-      readonly t DefaultStartupMemoryLow = ...;
-      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
-      readonly t DefaultMemoryMin = ...;
-      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryMin = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryLow = ...;
@@ -7940,12 +7898,6 @@ node /org/freedesktop/systemd1/unit/home_2emount {
 
     <!--property MemoryAccounting is not documented!-->
 
-    <!--property DefaultMemoryLow is not documented!-->
-
-    <!--property DefaultStartupMemoryLow is not documented!-->
-
-    <!--property DefaultMemoryMin is not documented!-->
-
     <!--property MemoryMin is not documented!-->
 
     <!--property MemoryLow is not documented!-->
@@ -8518,12 +8470,6 @@ node /org/freedesktop/systemd1/unit/home_2emount {
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryAccounting"/>
 
-    <variablelist class="dbus-property" generated="True" extra-ref="DefaultMemoryLow"/>
-
-    <variablelist class="dbus-property" generated="True" extra-ref="DefaultStartupMemoryLow"/>
-
-    <variablelist class="dbus-property" generated="True" extra-ref="DefaultMemoryMin"/>
-
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryMin"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryLow"/>
@@ -9377,12 +9323,6 @@ node /org/freedesktop/systemd1/unit/dev_2dsda3_2eswap {
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly b MemoryAccounting = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
-      readonly t DefaultMemoryLow = ...;
-      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
-      readonly t DefaultStartupMemoryLow = ...;
-      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
-      readonly t DefaultMemoryMin = ...;
-      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryMin = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryLow = ...;
@@ -9974,12 +9914,6 @@ node /org/freedesktop/systemd1/unit/dev_2dsda3_2eswap {
 
     <!--property MemoryAccounting is not documented!-->
 
-    <!--property DefaultMemoryLow is not documented!-->
-
-    <!--property DefaultStartupMemoryLow is not documented!-->
-
-    <!--property DefaultMemoryMin is not documented!-->
-
     <!--property MemoryMin is not documented!-->
 
     <!--property MemoryLow is not documented!-->
@@ -10534,12 +10468,6 @@ node /org/freedesktop/systemd1/unit/dev_2dsda3_2eswap {
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryAccounting"/>
 
-    <variablelist class="dbus-property" generated="True" extra-ref="DefaultMemoryLow"/>
-
-    <variablelist class="dbus-property" generated="True" extra-ref="DefaultStartupMemoryLow"/>
-
-    <variablelist class="dbus-property" generated="True" extra-ref="DefaultMemoryMin"/>
-
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryMin"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryLow"/>
@@ -11246,12 +11174,6 @@ node /org/freedesktop/systemd1/unit/system_2eslice {
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly b MemoryAccounting = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
-      readonly t DefaultMemoryLow = ...;
-      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
-      readonly t DefaultStartupMemoryLow = ...;
-      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
-      readonly t DefaultMemoryMin = ...;
-      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryMin = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryLow = ...;
@@ -11427,12 +11349,6 @@ node /org/freedesktop/systemd1/unit/system_2eslice {
 
     <!--property MemoryAccounting is not documented!-->
 
-    <!--property DefaultMemoryLow is not documented!-->
-
-    <!--property DefaultStartupMemoryLow is not documented!-->
-
-    <!--property DefaultMemoryMin is not documented!-->
-
     <!--property MemoryMin is not documented!-->
 
     <!--property MemoryLow is not documented!-->
@@ -11619,12 +11535,6 @@ node /org/freedesktop/systemd1/unit/system_2eslice {
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryAccounting"/>
 
-    <variablelist class="dbus-property" generated="True" extra-ref="DefaultMemoryLow"/>
-
-    <variablelist class="dbus-property" generated="True" extra-ref="DefaultStartupMemoryLow"/>
-
-    <variablelist class="dbus-property" generated="True" extra-ref="DefaultMemoryMin"/>
-
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryMin"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryLow"/>
@@ -11836,12 +11746,6 @@ node /org/freedesktop/systemd1/unit/session_2d1_2escope {
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly b MemoryAccounting = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
-      readonly t DefaultMemoryLow = ...;
-      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
-      readonly t DefaultStartupMemoryLow = ...;
-      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
-      readonly t DefaultMemoryMin = ...;
-      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryMin = ...;
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly t MemoryLow = ...;
@@ -12031,12 +11935,6 @@ node /org/freedesktop/systemd1/unit/session_2d1_2escope {
 
     <!--property MemoryAccounting is not documented!-->
 
-    <!--property DefaultMemoryLow is not documented!-->
-
-    <!--property DefaultStartupMemoryLow is not documented!-->
-
-    <!--property DefaultMemoryMin is not documented!-->
-
     <!--property MemoryMin is not documented!-->
 
     <!--property MemoryLow is not documented!-->
@@ -12247,12 +12145,6 @@ node /org/freedesktop/systemd1/unit/session_2d1_2escope {
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryAccounting"/>
 
-    <variablelist class="dbus-property" generated="True" extra-ref="DefaultMemoryLow"/>
-
-    <variablelist class="dbus-property" generated="True" extra-ref="DefaultStartupMemoryLow"/>
-
-    <variablelist class="dbus-property" generated="True" extra-ref="DefaultMemoryMin"/>
-
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryMin"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="MemoryLow"/>
index cabadb74f77a61f304d25b1878938af5ab00510a..12a3c0e644ebaf784fc7f010294a71b8a13a11d5 100644 (file)
@@ -326,7 +326,7 @@ CPUWeight=20   DisableControllers=cpu              /          \
 
       <varlistentry>
         <term><varname>MemoryMin=<replaceable>bytes</replaceable></varname>, <varname>MemoryLow=<replaceable>bytes</replaceable></varname></term>
-        <term><varname>StartupMemoryLow=<replaceable>bytes</replaceable></varname>, <varname>DefaultStartupMemoryLow=<replaceable>bytes</replaceable></varname></term>
+        <term><varname>StartupMemoryLow=<replaceable>bytes</replaceable></varname></term>
 
         <listitem>
           <para>These settings control the <option>memory</option> controller in the unified hierarchy.</para>
@@ -353,16 +353,6 @@ CPUWeight=20   DisableControllers=cpu              /          \
           For details about this control group attribute, see <ulink
           url="https://docs.kernel.org/admin-guide/cgroup-v2.html#memory-interface-files">Memory Interface Files</ulink>.</para>
 
-          <para>Units may have their children use a default <literal>memory.min</literal> or
-          <literal>memory.low</literal> value by specifying <varname>DefaultMemoryMin=</varname> or
-          <varname>DefaultMemoryLow=</varname>, which has the same semantics as
-          <varname>MemoryMin=</varname> and <varname>MemoryLow=</varname>, or <varname>DefaultStartupMemoryLow=</varname>
-          which has the same semantics as <varname>StartupMemoryLow=</varname>.
-          This setting does not affect <literal>memory.min</literal> or <literal>memory.low</literal>
-          in the unit itself.
-          Using it to set a default child allocation is only useful on kernels older than 5.7,
-          which do not support the <literal>memory_recursiveprot</literal> cgroup2 mount option.</para>
-
           <para>While <varname>StartupMemoryLow=</varname> applies to the startup and shutdown phases of the system,
           <varname>MemoryMin=</varname> applies to normal runtime of the system, and if the former is not set also to
           the startup and shutdown phases. Using <varname>StartupMemoryLow=</varname> allows prioritizing specific services at
index 6519440e457315d4e6e4c4f421e943db313e150d..6a434eba84bdfc9f15635b29aac97c1e4b1f311e 100644 (file)
@@ -330,13 +330,13 @@ static int unit_compare_memory_limit(Unit *u, const char *property_name, uint64_
         bool startup = u->manager && IN_SET(manager_state(u->manager), MANAGER_STARTING, MANAGER_INITIALIZING, MANAGER_STOPPING);
 
         if (streq(property_name, "MemoryLow")) {
-                unit_value = unit_get_ancestor_memory_low(u);
+                unit_value = c->memory_low;
                 file = "memory.low";
         } else if (startup && streq(property_name, "StartupMemoryLow")) {
-                unit_value = unit_get_ancestor_startup_memory_low(u);
+                unit_value = c->startup_memory_low;
                 file = "memory.low";
         } else if (streq(property_name, "MemoryMin")) {
-                unit_value = unit_get_ancestor_memory_min(u);
+                unit_value = c->memory_min;
                 file = "memory.min";
         } else if (streq(property_name, "MemoryHigh")) {
                 unit_value = c->memory_high;
@@ -504,8 +504,6 @@ void cgroup_context_dump(Unit *u, FILE* f, const char *prefix) {
                 "%sStartupAllowedMemoryNodes: %s\n"
                 "%sIOWeight: %" PRIu64 "\n"
                 "%sStartupIOWeight: %" PRIu64 "\n"
-                "%sDefaultMemoryMin: %" PRIu64 "\n"
-                "%sDefaultMemoryLow: %" PRIu64 "\n"
                 "%sMemoryMin: %" PRIu64 "%s\n"
                 "%sMemoryLow: %" PRIu64 "%s\n"
                 "%sStartupMemoryLow: %" PRIu64 "%s\n"
@@ -542,8 +540,6 @@ void cgroup_context_dump(Unit *u, FILE* f, const char *prefix) {
                 prefix, strempty(startup_cpuset_mems),
                 prefix, c->io_weight,
                 prefix, c->startup_io_weight,
-                prefix, c->default_memory_min,
-                prefix, c->default_memory_low,
                 prefix, c->memory_min, format_cgroup_memory_limit_comparison(u, "MemoryMin", cda, sizeof(cda)),
                 prefix, c->memory_low, format_cgroup_memory_limit_comparison(u, "MemoryLow", cdb, sizeof(cdb)),
                 prefix, c->startup_memory_low, format_cgroup_memory_limit_comparison(u, "StartupMemoryLow", cdc, sizeof(cdc)),
@@ -764,36 +760,6 @@ int cgroup_context_add_bpf_foreign_program(CGroupContext *c, uint32_t attach_typ
         return 0;
 }
 
-#define UNIT_DEFINE_ANCESTOR_MEMORY_LOOKUP(entry)                       \
-        uint64_t unit_get_ancestor_##entry(Unit *u) {                   \
-                CGroupContext *c;                                       \
-                                                                        \
-                /* 1. Is entry set in this unit? If so, use that.       \
-                 * 2. Is the default for this entry set in any          \
-                 *    ancestor? If so, use that.                        \
-                 * 3. Otherwise, return CGROUP_LIMIT_MIN. */            \
-                                                                        \
-                assert(u);                                              \
-                                                                        \
-                c = unit_get_cgroup_context(u);                         \
-                if (c && c->entry##_set)                                \
-                        return c->entry;                                \
-                                                                        \
-                while ((u = UNIT_GET_SLICE(u))) {                       \
-                        c = unit_get_cgroup_context(u);                 \
-                        if (c && c->default_##entry##_set)              \
-                                return c->default_##entry;              \
-                }                                                       \
-                                                                        \
-                /* We've reached the root, but nobody had default for   \
-                 * this entry set, so set it to the kernel default. */  \
-                return CGROUP_LIMIT_MIN;                                \
-}
-
-UNIT_DEFINE_ANCESTOR_MEMORY_LOOKUP(memory_low);
-UNIT_DEFINE_ANCESTOR_MEMORY_LOOKUP(startup_memory_low);
-UNIT_DEFINE_ANCESTOR_MEMORY_LOOKUP(memory_min);
-
 static void unit_set_xattr_graceful(Unit *u, const char *name, const void *data, size_t size) {
         int r;
 
@@ -1263,15 +1229,11 @@ static void cgroup_apply_io_device_limit(Unit *u, const char *dev_path, uint64_t
         (void) set_attribute_and_warn(u, "io.max", buf);
 }
 
-static bool unit_has_memory_config(Unit *u) {
-        CGroupContext *c;
-
-        assert(u);
-
-        assert_se(c = unit_get_cgroup_context(u));
+static bool cgroup_context_has_memory_config(CGroupContext *c) {
+        assert(c);
 
-        return unit_get_ancestor_memory_min(u) > 0 ||
-               unit_get_ancestor_memory_low(u) > 0 || unit_get_ancestor_startup_memory_low(u) > 0 ||
+        return c->memory_min > 0 ||
+               c->memory_low > 0 || c->startup_memory_low_set ||
                c->memory_high != CGROUP_LIMIT_MAX || c->startup_memory_high_set ||
                c->memory_max != CGROUP_LIMIT_MAX || c->startup_memory_max_set ||
                c->memory_swap_max != CGROUP_LIMIT_MAX || c->startup_memory_swap_max_set ||
@@ -1517,19 +1479,20 @@ static void cgroup_context_apply(
 
         /* 'memory' attributes do not exist on the root cgroup. */
         if ((apply_mask & CGROUP_MASK_MEMORY) && !is_local_root) {
-                uint64_t max = CGROUP_LIMIT_MAX, swap_max = CGROUP_LIMIT_MAX, zswap_max = CGROUP_LIMIT_MAX, high = CGROUP_LIMIT_MAX;
+                uint64_t low = CGROUP_LIMIT_MIN, max = CGROUP_LIMIT_MAX, swap_max = CGROUP_LIMIT_MAX, zswap_max = CGROUP_LIMIT_MAX, high = CGROUP_LIMIT_MAX;
 
-                if (unit_has_memory_config(u)) {
+                if (cgroup_context_has_memory_config(c)) {
                         bool startup = IN_SET(state, MANAGER_STARTING, MANAGER_INITIALIZING, MANAGER_STOPPING);
 
+                        low = startup && c->startup_memory_low_set ? c->startup_memory_low : c->memory_low;
                         high = startup && c->startup_memory_high_set ? c->startup_memory_high : c->memory_high;
                         max = startup && c->startup_memory_max_set ? c->startup_memory_max : c->memory_max;
                         swap_max = startup && c->startup_memory_swap_max_set ? c->startup_memory_swap_max : c->memory_swap_max;
                         zswap_max = startup && c->startup_memory_zswap_max_set ? c->startup_memory_zswap_max : c->memory_zswap_max;
                 }
 
-                cgroup_apply_memory_limit(u, "memory.min", unit_get_ancestor_memory_min(u));
-                cgroup_apply_memory_limit(u, "memory.low", unit_get_ancestor_memory_low(u));
+                cgroup_apply_memory_limit(u, "memory.min", c->memory_min);
+                cgroup_apply_memory_limit(u, "memory.low", low);
                 cgroup_apply_memory_limit(u, "memory.high", high);
                 cgroup_apply_memory_limit(u, "memory.max", max);
                 cgroup_apply_memory_limit(u, "memory.swap.max", swap_max);
@@ -1697,7 +1660,7 @@ static CGroupMask unit_get_cgroup_mask(Unit *u) {
                 mask |= CGROUP_MASK_IO;
 
         if (c->memory_accounting ||
-            unit_has_memory_config(u))
+            cgroup_context_has_memory_config(c))
                 mask |= CGROUP_MASK_MEMORY;
 
         if (cgroup_context_has_device_policy(c))
index 5d450bd6085aee0f824b6594bddc0e7675e076d7..0cd290e92f25d2170eaac68a4910bc4ba59aa56e 100644 (file)
@@ -137,9 +137,6 @@ typedef struct CGroupContext {
         LIST_HEAD(CGroupIODeviceLimit, io_device_limits);
         LIST_HEAD(CGroupIODeviceLatency, io_device_latencies);
 
-        uint64_t default_memory_min;
-        uint64_t default_memory_low;
-        uint64_t default_startup_memory_low;
         uint64_t memory_min;
         uint64_t memory_low;
         uint64_t startup_memory_low;
@@ -152,11 +149,6 @@ typedef struct CGroupContext {
         uint64_t memory_zswap_max;
         uint64_t startup_memory_zswap_max;
 
-        bool default_memory_min_set:1;
-        bool default_memory_low_set:1;
-        bool default_startup_memory_low_set:1;
-        bool memory_min_set:1;
-        bool memory_low_set:1;
         bool startup_memory_low_set:1;
         bool startup_memory_high_set:1;
         bool startup_memory_max_set:1;
@@ -416,10 +408,6 @@ Unit* manager_get_unit_by_pidref_cgroup(Manager *m, const PidRef *pid);
 Unit* manager_get_unit_by_pidref_watching(Manager *m, const PidRef *pid);
 Unit* manager_get_unit_by_pidref(Manager *m, PidRef *pid);
 
-uint64_t unit_get_ancestor_memory_min(Unit *u);
-uint64_t unit_get_ancestor_memory_low(Unit *u);
-uint64_t unit_get_ancestor_startup_memory_low(Unit *u);
-
 int unit_search_main_pid(Unit *u, PidRef *ret);
 
 int unit_get_memory_available(Unit *u, uint64_t *ret);
index 92c59cd4ecf59d6c1a5c4fa1105eb183bab72e37..dcb27f80f8c6a029dd0a591881588d0560bd37b3 100644 (file)
@@ -395,9 +395,6 @@ const sd_bus_vtable bus_cgroup_vtable[] = {
         SD_BUS_PROPERTY("IOWriteIOPSMax", "a(st)", property_get_io_device_limits, 0, 0),
         SD_BUS_PROPERTY("IODeviceLatencyTargetUSec", "a(st)", property_get_io_device_latency, 0, 0),
         SD_BUS_PROPERTY("MemoryAccounting", "b", bus_property_get_bool, offsetof(CGroupContext, memory_accounting), 0),
-        SD_BUS_PROPERTY("DefaultMemoryLow", "t", NULL, offsetof(CGroupContext, default_memory_low), 0),
-        SD_BUS_PROPERTY("DefaultStartupMemoryLow", "t", NULL, offsetof(CGroupContext, default_startup_memory_low), 0),
-        SD_BUS_PROPERTY("DefaultMemoryMin", "t", NULL, offsetof(CGroupContext, default_memory_min), 0),
         SD_BUS_PROPERTY("MemoryMin", "t", NULL, offsetof(CGroupContext, memory_min), 0),
         SD_BUS_PROPERTY("MemoryLow", "t", NULL, offsetof(CGroupContext, memory_low), 0),
         SD_BUS_PROPERTY("StartupMemoryLow", "t", NULL, offsetof(CGroupContext, startup_memory_low), 0),
@@ -447,6 +444,10 @@ const sd_bus_vtable bus_cgroup_vtable[] = {
         SD_BUS_PROPERTY("BlockIOWriteBandwidth", "a(st)", property_get_blockio_ast, 0, SD_BUS_VTABLE_DEPRECATED|SD_BUS_VTABLE_HIDDEN),
         /* since kernel v4.15 CPU accounting requires no controller, i.e. is available everywhere */
         SD_BUS_PROPERTY("CPUAccounting", "b", bus_property_get_bool_true, 0, SD_BUS_VTABLE_DEPRECATED|SD_BUS_VTABLE_HIDDEN),
+        /* since kernel v5.7 kernel would take care of these when cgroup is mounted with memory_recursiveprot */
+        SD_BUS_PROPERTY("DefaultMemoryMin", "t", bus_property_get_uint64_0, 0, SD_BUS_VTABLE_DEPRECATED|SD_BUS_VTABLE_HIDDEN),
+        SD_BUS_PROPERTY("DefaultMemoryLow", "t", bus_property_get_uint64_0, 0, SD_BUS_VTABLE_DEPRECATED|SD_BUS_VTABLE_HIDDEN),
+        SD_BUS_PROPERTY("DefaultStartupMemoryLow", "t", bus_property_get_uint64_0, 0, SD_BUS_VTABLE_DEPRECATED|SD_BUS_VTABLE_HIDDEN),
 
         SD_BUS_VTABLE_END
 };
@@ -1053,19 +1054,11 @@ int bus_cgroup_set_property(
         if (streq(name, "MemoryAccounting"))
                 return bus_cgroup_set_boolean(u, name, &c->memory_accounting, CGROUP_MASK_MEMORY, message, flags, reterr_error);
 
-        if (streq(name, "MemoryMin")) {
-                r = bus_cgroup_set_memory_protection(u, name, &c->memory_min, message, flags, reterr_error);
-                if (r > 0)
-                        c->memory_min_set = true;
-                return r;
-        }
+        if (streq(name, "MemoryMin"))
+                return bus_cgroup_set_memory_protection(u, name, &c->memory_min, message, flags, reterr_error);
 
-        if (streq(name, "MemoryLow")) {
-                r = bus_cgroup_set_memory_protection(u, name, &c->memory_low, message, flags, reterr_error);
-                if (r > 0)
-                        c->memory_low_set = true;
-                return r;
-        }
+        if (streq(name, "MemoryLow"))
+                return bus_cgroup_set_memory_protection(u, name, &c->memory_low, message, flags, reterr_error);
 
         if (streq(name, "StartupMemoryLow")) {
                 r = bus_cgroup_set_memory_protection(u, name, &c->startup_memory_low, message, flags, reterr_error);
@@ -1074,27 +1067,6 @@ int bus_cgroup_set_property(
                 return r;
         }
 
-        if (streq(name, "DefaultMemoryMin")) {
-                r = bus_cgroup_set_memory_protection(u, name, &c->default_memory_min, message, flags, reterr_error);
-                if (r > 0)
-                        c->default_memory_min_set = true;
-                return r;
-        }
-
-        if (streq(name, "DefaultMemoryLow")) {
-                r = bus_cgroup_set_memory_protection(u, name, &c->default_memory_low, message, flags, reterr_error);
-                if (r > 0)
-                        c->default_memory_low_set = true;
-                return r;
-        }
-
-        if (streq(name, "DefaultStartupMemoryLow")) {
-                r = bus_cgroup_set_memory_protection(u, name, &c->default_startup_memory_low, message, flags, reterr_error);
-                if (r > 0)
-                        c->default_startup_memory_low_set = true;
-                return r;
-        }
-
         if (streq(name, "MemoryHigh"))
                 return bus_cgroup_set_memory(u, name, &c->memory_high, message, flags, reterr_error);
 
@@ -1135,33 +1107,11 @@ int bus_cgroup_set_property(
                 return r;
         }
 
-        if (streq(name, "MemoryMinScale")) {
-                r = bus_cgroup_set_memory_protection_scale(u, name, &c->memory_min, message, flags, reterr_error);
-                if (r > 0)
-                        c->memory_min_set = true;
-                return r;
-        }
-
-        if (streq(name, "MemoryLowScale")) {
-                r = bus_cgroup_set_memory_protection_scale(u, name, &c->memory_low, message, flags, reterr_error);
-                if (r > 0)
-                        c->memory_low_set = true;
-                return r;
-        }
-
-        if (streq(name, "DefaultMemoryMinScale")) {
-                r = bus_cgroup_set_memory_protection_scale(u, name, &c->default_memory_min, message, flags, reterr_error);
-                if (r > 0)
-                        c->default_memory_min_set = true;
-                return r;
-        }
+        if (streq(name, "MemoryMinScale"))
+                return bus_cgroup_set_memory_protection_scale(u, name, &c->memory_min, message, flags, reterr_error);
 
-        if (streq(name, "DefaultMemoryLowScale")) {
-                r = bus_cgroup_set_memory_protection_scale(u, name, &c->default_memory_low, message, flags, reterr_error);
-                if (r > 0)
-                        c->default_memory_low_set = true;
-                return r;
-        }
+        if (streq(name, "MemoryLowScale"))
+                return bus_cgroup_set_memory_protection_scale(u, name, &c->memory_low, message, flags, reterr_error);
 
         if (streq(name, "MemoryHighScale"))
                 return bus_cgroup_set_memory_scale(u, name, &c->memory_high, message, flags, reterr_error);
@@ -2041,8 +1991,8 @@ int bus_cgroup_set_property(
                 return 1;
         }
 
-        /* deprecated CGroup v1 properties */
         if (STR_IN_SET(name,
+                       /* deprecated CGroup v1 properties */
                        "MemoryLimit",
                        "MemoryLimitScale",
                        "CPUShares",
@@ -2053,7 +2003,13 @@ int bus_cgroup_set_property(
                        "BlockIODeviceWeight",
                        "BlockIOReadBandwidth",
                        "BlockIOWriteBandwidth",
-                       "CPUAccounting")) { /* see comment in bus_cgroup_vtable */
+                       /* see comments in bus_cgroup_vtable */
+                       "CPUAccounting",
+                       "DefaultMemoryMin",
+                       "DefaultMemoryMinScale",
+                       "DefaultMemoryLow",
+                       "DefaultMemoryLowScale",
+                       "DefaultStartupMemoryLow")) {
 
                 r = sd_bus_message_skip(message, NULL);
                 if (r < 0)
index 955fa1937cdb61496e17377eb1ae85d44e2bdd16..3ffedf58db74df7830220bea24da719fe7d2482e 100644 (file)
@@ -132,18 +132,6 @@ static int exec_cgroup_context_serialize(const CGroupContext *c, FILE *f) {
                         return r;
         }
 
-        if (c->default_memory_min > 0) {
-                r = serialize_item_format(f, "exec-cgroup-context-default-memory-min", "%" PRIu64, c->default_memory_min);
-                if (r < 0)
-                        return r;
-        }
-
-        if (c->default_memory_low > 0) {
-                r = serialize_item_format(f, "exec-cgroup-context-default-memory-low", "%" PRIu64, c->default_memory_low);
-                if (r < 0)
-                        return r;
-        }
-
         if (c->memory_min > 0) {
                 r = serialize_item_format(f, "exec-cgroup-context-memory-min", "%" PRIu64, c->memory_min);
                 if (r < 0)
@@ -226,26 +214,6 @@ static int exec_cgroup_context_serialize(const CGroupContext *c, FILE *f) {
                         return r;
         }
 
-        r = serialize_bool_elide(f, "exec-cgroup-context-default-memory-min-set", c->default_memory_min_set);
-        if (r < 0)
-                return r;
-
-        r = serialize_bool_elide(f, "exec-cgroup-context-default-memory-low-set", c->default_memory_low_set);
-        if (r < 0)
-                return r;
-
-        r = serialize_bool_elide(f, "exec-cgroup-context-default-startup-memory-low-set", c->default_startup_memory_low_set);
-        if (r < 0)
-                return r;
-
-        r = serialize_bool_elide(f, "exec-cgroup-context-memory-min-set", c->memory_min_set);
-        if (r < 0)
-                return r;
-
-        r = serialize_bool_elide(f, "exec-cgroup-context-memory-low-set", c->memory_low_set);
-        if (r < 0)
-                return r;
-
         r = serialize_bool_elide(f, "exec-cgroup-context-startup-memory-low-set", c->startup_memory_low_set);
         if (r < 0)
                 return r;
@@ -532,14 +500,6 @@ static int exec_cgroup_context_deserialize(CGroupContext *c, FILE *f) {
                         r = safe_atou64(val, &c->startup_io_weight);
                         if (r < 0)
                                 return r;
-                } else if ((val = startswith(l, "exec-cgroup-context-default-memory-min="))) {
-                        r = safe_atou64(val, &c->default_memory_min);
-                        if (r < 0)
-                                return r;
-                } else if ((val = startswith(l, "exec-cgroup-context-default-memory-low="))) {
-                        r = safe_atou64(val, &c->default_memory_low);
-                        if (r < 0)
-                                return r;
                 } else if ((val = startswith(l, "exec-cgroup-context-memory-min="))) {
                         r = safe_atou64(val, &c->memory_min);
                         if (r < 0)
@@ -597,31 +557,6 @@ static int exec_cgroup_context_deserialize(CGroupContext *c, FILE *f) {
                         r = safe_atou64(val, &c->tasks_max.scale);
                         if (r < 0)
                                 return r;
-                } else if ((val = startswith(l, "exec-cgroup-context-default-memory-min-set="))) {
-                        r = parse_boolean(val);
-                        if (r < 0)
-                                return r;
-                        c->default_memory_min_set = r;
-                } else if ((val = startswith(l, "exec-cgroup-context-default-memory-low-set="))) {
-                        r = parse_boolean(val);
-                        if (r < 0)
-                                return r;
-                        c->default_memory_low_set = r;
-                } else if ((val = startswith(l, "exec-cgroup-context-default-startup-memory-low-set="))) {
-                        r = parse_boolean(val);
-                        if (r < 0)
-                                return r;
-                        c->default_startup_memory_low_set = r;
-                } else if ((val = startswith(l, "exec-cgroup-context-memory-min-set="))) {
-                        r = parse_boolean(val);
-                        if (r < 0)
-                                return r;
-                        c->memory_min_set = r;
-                } else if ((val = startswith(l, "exec-cgroup-context-memory-low-set="))) {
-                        r = parse_boolean(val);
-                        if (r < 0)
-                                return r;
-                        c->memory_low_set = r;
                 } else if ((val = startswith(l, "exec-cgroup-context-startup-memory-low-set="))) {
                         r = parse_boolean(val);
                         if (r < 0)
index 69e39ed0dc3a2c02d4cd79245f0e3d791086f1a7..7f8198ff487c2b4a33f1cad4743c2a9962029ef4 100644 (file)
 {{type}}.CPUQuotaPeriodSec,                   config_parse_sec_def_infinity,                      0,                                  offsetof({{type}}, cgroup_context.cpu_quota_period_usec)
 {{type}}.MemoryAccounting,                    config_parse_bool,                                  0,                                  offsetof({{type}}, cgroup_context.memory_accounting)
 {{type}}.MemoryMin,                           config_parse_memory_limit,                          0,                                  offsetof({{type}}, cgroup_context)
-{{type}}.DefaultMemoryMin,                    config_parse_memory_limit,                          0,                                  offsetof({{type}}, cgroup_context)
-{{type}}.DefaultMemoryLow,                    config_parse_memory_limit,                          0,                                  offsetof({{type}}, cgroup_context)
-{{type}}.DefaultStartupMemoryLow,             config_parse_memory_limit,                          0,                                  offsetof({{type}}, cgroup_context)
 {{type}}.MemoryLow,                           config_parse_memory_limit,                          0,                                  offsetof({{type}}, cgroup_context)
 {{type}}.StartupMemoryLow,                    config_parse_memory_limit,                          0,                                  offsetof({{type}}, cgroup_context)
+{{type}}.DefaultMemoryMin,                    config_parse_warn_compat,                           DISABLED_LEGACY,                    0
+{{type}}.DefaultMemoryLow,                    config_parse_warn_compat,                           DISABLED_LEGACY,                    0
+{{type}}.DefaultStartupMemoryLow,             config_parse_warn_compat,                           DISABLED_LEGACY,                    0
 {{type}}.MemoryHigh,                          config_parse_memory_limit,                          0,                                  offsetof({{type}}, cgroup_context)
 {{type}}.StartupMemoryHigh,                   config_parse_memory_limit,                          0,                                  offsetof({{type}}, cgroup_context)
 {{type}}.MemoryMax,                           config_parse_memory_limit,                          0,                                  offsetof({{type}}, cgroup_context)
index baee9b56c9da698e39f04778122e1da247b4f76e..decdd2eae306355474c23ec0e1c1b66b3d620d34 100644 (file)
@@ -3790,9 +3790,7 @@ int config_parse_memory_limit(
         uint64_t bytes = CGROUP_LIMIT_MAX;
         int r;
 
-        if (isempty(rvalue) && STR_IN_SET(lvalue, "DefaultMemoryLow",
-                                                  "DefaultMemoryMin",
-                                                  "MemoryLow",
+        if (isempty(rvalue) && STR_IN_SET(lvalue, "MemoryLow",
                                                   "StartupMemoryLow",
                                                   "MemoryMin"))
                 bytes = CGROUP_LIMIT_MIN;
@@ -3816,31 +3814,17 @@ int config_parse_memory_limit(
                                                "StartupMemoryZSwapMax",
                                                "MemoryLow",
                                                "StartupMemoryLow",
-                                               "MemoryMin",
-                                               "DefaultMemoryLow",
-                                               "DefaultstartupMemoryLow",
-                                               "DefaultMemoryMin"))) {
+                                               "MemoryMin"))) {
                         log_syntax(unit, LOG_WARNING, filename, line, 0, "Memory limit '%s' out of range, ignoring.", rvalue);
                         return 0;
                 }
         }
 
-        if (streq(lvalue, "DefaultMemoryLow")) {
-                c->default_memory_low = bytes;
-                c->default_memory_low_set = true;
-        } else if (streq(lvalue, "DefaultStartupMemoryLow")) {
-                c->default_startup_memory_low = bytes;
-                c->default_startup_memory_low_set = true;
-        } else if (streq(lvalue, "DefaultMemoryMin")) {
-                c->default_memory_min = bytes;
-                c->default_memory_min_set = true;
-        } else if (streq(lvalue, "MemoryMin")) {
+        if (streq(lvalue, "MemoryMin"))
                 c->memory_min = bytes;
-                c->memory_min_set = true;
-        } else if (streq(lvalue, "MemoryLow")) {
+        else if (streq(lvalue, "MemoryLow"))
                 c->memory_low = bytes;
-                c->memory_low_set = true;
-        } else if (streq(lvalue, "StartupMemoryLow")) {
+        else if (streq(lvalue, "StartupMemoryLow")) {
                 c->startup_memory_low = bytes;
                 c->startup_memory_low_set = true;
         } else if (streq(lvalue, "MemoryHigh"))
index d26542f03241c96c7491e85f27847f1b32d87338..ffa3b7ca6d08e5981a57f614d15d1ce1b4799de4 100644 (file)
@@ -259,12 +259,9 @@ int unit_cgroup_context_build_json(sd_json_variant **ret, const char *name, void
 
                         /* Memory Accounting and Control */
                         SD_JSON_BUILD_PAIR_BOOLEAN("MemoryAccounting", c->memory_accounting),
-                        JSON_BUILD_PAIR_CONDITION_UNSIGNED(c->memory_min_set, "MemoryMin", c->memory_min),
-                        JSON_BUILD_PAIR_CONDITION_UNSIGNED(c->default_memory_min_set, "DefaultMemoryMin", c->default_memory_min),
-                        JSON_BUILD_PAIR_CONDITION_UNSIGNED(c->memory_low_set, "MemoryLow", c->memory_low),
-                        JSON_BUILD_PAIR_CONDITION_UNSIGNED(c->default_memory_low_set, "DefaultMemoryLow", c->default_memory_low),
+                        JSON_BUILD_PAIR_UNSIGNED_NOT_EQUAL("MemoryMin", c->memory_min, CGROUP_LIMIT_MIN),
+                        JSON_BUILD_PAIR_UNSIGNED_NOT_EQUAL("MemoryLow", c->memory_low, CGROUP_LIMIT_MIN),
                         JSON_BUILD_PAIR_CONDITION_UNSIGNED(c->startup_memory_low_set, "StartupMemoryLow", c->startup_memory_low),
-                        JSON_BUILD_PAIR_CONDITION_UNSIGNED(c->default_startup_memory_low_set, "DefaultStartupMemoryLow", c->default_startup_memory_low),
                         JSON_BUILD_PAIR_UNSIGNED_NOT_EQUAL("MemoryHigh", c->memory_high, CGROUP_LIMIT_MAX),
                         JSON_BUILD_PAIR_CONDITION_UNSIGNED(c->startup_memory_high_set, "StartupMemoryHigh", c->startup_memory_high),
                         JSON_BUILD_PAIR_UNSIGNED_NOT_EQUAL("MemoryMax", c->memory_max, CGROUP_LIMIT_MAX),
index ffbe2b7930b67374231ea51efe28b51b250847c5..c977df66d0c667ac728ec7d74777125db0805724 100644 (file)
@@ -10,6 +10,7 @@
 
 BUS_DEFINE_PROPERTY_GET_GLOBAL(bus_property_get_bool_false, "b", 0);
 BUS_DEFINE_PROPERTY_GET_GLOBAL(bus_property_get_bool_true, "b", 1);
+BUS_DEFINE_PROPERTY_GET_GLOBAL(bus_property_get_uint64_0, "t", UINT64_C(0));
 BUS_DEFINE_PROPERTY_GET_GLOBAL(bus_property_get_uint64_max, "t", UINT64_MAX);
 
 int bus_property_get_bool(
index 23d68bd635af039b5b0509b29c7fad64c80b090a..219c8195b732c7729230c567164b0068b5fcc454 100644 (file)
@@ -107,4 +107,5 @@ int bus_property_get_pidfdid(sd_bus *bus, const char *path, const char *interfac
 /* For deprecated properties. */
 int bus_property_get_bool_false(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *reterr_error);
 int bus_property_get_bool_true(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *reterr_error);
+int bus_property_get_uint64_0(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *reterr_error);
 int bus_property_get_uint64_max(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *reterr_error);
index 894a2639cdb0f9ab5de0855be6d015c18a0e20b1..ad718ea0f02c7cd4f765b54077979acbd2bd096f 100644 (file)
@@ -342,8 +342,6 @@ static int bus_append_parse_resource_limit(sd_bus_message *m, const char *field,
         if (isempty(eq) || streq(eq, "infinity")) {
                 uint64_t x = streq(eq, "infinity") ? CGROUP_LIMIT_MAX :
                         STR_IN_SET(field,
-                                   "DefaultMemoryLow",
-                                   "DefaultMemoryMin",
                                    "MemoryLow",
                                    "MemoryMin") ? CGROUP_LIMIT_MIN : CGROUP_LIMIT_MAX;
 
@@ -2348,8 +2346,6 @@ static const BusProperty cgroup_properties[] = {
         { "DisableControllers",                    bus_append_strv                               },
         { "Delegate",                              bus_append_parse_delegate                     },
         { "MemoryMin",                             bus_append_parse_resource_limit               },
-        { "DefaultMemoryLow",                      bus_append_parse_resource_limit               },
-        { "DefaultMemoryMin",                      bus_append_parse_resource_limit               },
         { "MemoryLow",                             bus_append_parse_resource_limit               },
         { "MemoryHigh",                            bus_append_parse_resource_limit               },
         { "MemoryMax",                             bus_append_parse_resource_limit               },
@@ -2386,6 +2382,8 @@ static const BusProperty cgroup_properties[] = {
         { "BlockIOReadBandwidth",                  warn_deprecated                               },
         { "BlockIOWriteBandwidth",                 warn_deprecated                               },
         { "CPUAccounting",                         warn_deprecated                               },
+        { "DefaultMemoryMin",                      warn_deprecated                               },
+        { "DefaultMemoryLow",                      warn_deprecated                               },
 
         { NULL, bus_try_append_parse_cgroup_io_limit, cgroup_io_limits_list                      },
         {}
index 1cdb52de14e21b4241411f01906a2828fbbc3914..f8e255dd5b9aaab4bc3e57988b155407d0706b0d 100644 (file)
@@ -111,15 +111,9 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE(
                 SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.resource-control.html#MemoryMin=bytes,%20MemoryLow=bytes"),
                 SD_VARLINK_DEFINE_FIELD(MemoryMin, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
                 SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.resource-control.html#MemoryMin=bytes,%20MemoryLow=bytes"),
-                SD_VARLINK_DEFINE_FIELD(DefaultMemoryMin, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
-                SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.resource-control.html#MemoryMin=bytes,%20MemoryLow=bytes"),
                 SD_VARLINK_DEFINE_FIELD(MemoryLow, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
                 SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.resource-control.html#MemoryMin=bytes,%20MemoryLow=bytes"),
-                SD_VARLINK_DEFINE_FIELD(DefaultMemoryLow, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
-                SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.resource-control.html#MemorySwapMax=bytes"),
                 SD_VARLINK_DEFINE_FIELD(StartupMemoryLow, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
-                SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.resource-control.html#MemoryMin=bytes,%20MemoryLow=bytes"),
-                SD_VARLINK_DEFINE_FIELD(DefaultStartupMemoryLow, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
                 SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.resource-control.html#MemoryHigh=bytes"),
                 SD_VARLINK_DEFINE_FIELD(MemoryHigh, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
                 SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.resource-control.html#MemoryHigh=bytes"),
index 08319602c001752517dae24e0edaca1aec1f2b8a..c35db87c45a88ff2b14d9d72a6f08c27eea3b5c1 100644 (file)
@@ -302,10 +302,6 @@ typedef struct UnitStatusInfo {
         uint64_t io_read_bytes;
         uint64_t io_write_bytes;
 
-        uint64_t default_memory_min;
-        uint64_t default_memory_low;
-        uint64_t default_startup_memory_low;
-
         /* Exec Quotas */
         QuotaInfo exec_directories_quota[_EXEC_DIRECTORY_TYPE_MAX];
 
@@ -2248,9 +2244,6 @@ static int show_one(
                 { "MemorySwapPeak",                 "t",               NULL,           offsetof(UnitStatusInfo, memory_swap_peak)                  },
                 { "MemoryZSwapCurrent",             "t",               NULL,           offsetof(UnitStatusInfo, memory_zswap_current)              },
                 { "MemoryAvailable",                "t",               NULL,           offsetof(UnitStatusInfo, memory_available)                  },
-                { "DefaultMemoryMin",               "t",               NULL,           offsetof(UnitStatusInfo, default_memory_min)                },
-                { "DefaultMemoryLow",               "t",               NULL,           offsetof(UnitStatusInfo, default_memory_low)                },
-                { "DefaultStartupMemoryLow",        "t",               NULL,           offsetof(UnitStatusInfo, default_startup_memory_low)        },
                 { "MemoryMin",                      "t",               NULL,           offsetof(UnitStatusInfo, memory_min)                        },
                 { "MemoryLow",                      "t",               NULL,           offsetof(UnitStatusInfo, memory_low)                        },
                 { "StartupMemoryLow",               "t",               NULL,           offsetof(UnitStatusInfo, startup_memory_low)                },
index 44b6d5e4bd36b5e7cdafda8c90b251a289ba28f6..c68477dc60c2c6b76884a6639317e87a9b82763f 100644 (file)
@@ -540,9 +540,6 @@ executables += [
                 'sources' : files('test-cgroup-mask.c'),
                 'dependencies' : common_test_dependencies,
         },
-        core_test_template + {
-                'sources' : files('test-cgroup-unit-default.c'),
-        },
         core_test_template + {
                 'sources' : files('test-chown-rec.c'),
         },
diff --git a/src/test/test-cgroup-unit-default.c b/src/test/test-cgroup-unit-default.c
deleted file mode 100644 (file)
index a841524..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include "cgroup.h"
-#include "manager.h"
-#include "rm-rf.h"
-#include "tests.h"
-#include "unit.h"
-
-TEST_RET(default_memory_low, .sd_booted = true) {
-        _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL;
-        _cleanup_(manager_freep) Manager *m = NULL;
-        Unit *root, *dml,
-             *dml_passthrough, *dml_passthrough_empty, *dml_passthrough_set_dml, *dml_passthrough_set_ml,
-             *dml_override, *dml_override_empty,
-             *dml_discard, *dml_discard_empty, *dml_discard_set_ml;
-        uint64_t dml_tree_default;
-        int r;
-
-        r = enter_cgroup_subroot(NULL);
-        if (r == -ENOMEDIUM)
-                return log_tests_skipped("cgroupfs not available");
-
-        _cleanup_free_ char *unit_dir = NULL;
-        ASSERT_OK(get_testdata_dir("test-cgroup-unit-default", &unit_dir));
-        ASSERT_OK(setenv_unit_path(unit_dir));
-        assert_se(runtime_dir = setup_fake_runtime_dir());
-        r = manager_new(RUNTIME_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m);
-        if (IN_SET(r, -EPERM, -EACCES)) {
-                log_error_errno(r, "manager_new: %m");
-                return log_tests_skipped("cannot create manager");
-        }
-
-        ASSERT_OK(r);
-        ASSERT_OK(manager_startup(m, NULL, NULL, NULL));
-
-        /* dml.slice has DefaultMemoryLow=50. Beyond that, individual subhierarchies look like this:
-         *
-         * 1. dml-passthrough.slice sets MemoryLow=100. This should not affect its children, as only
-         *    DefaultMemoryLow is propagated, not MemoryLow. As such, all leaf services should end up with
-         *    memory.low as 50, inherited from dml.slice, *except* for dml-passthrough-set-ml.service, which
-         *    should have the value of 0, as it has MemoryLow explicitly set.
-         *
-         *                                                  ┌───────────┐
-         *                                                  │ dml.slice │
-         *                                                  └─────┬─────┘
-         *                                                  MemoryLow=100
-         *                                            ┌───────────┴───────────┐
-         *                                            │ dml-passthrough.slice │
-         *                                            └───────────┬───────────┘
-         *                    ┌───────────────────────────────────┼───────────────────────────────────┐
-         *             no new settings                   DefaultMemoryLow=15                     MemoryLow=0
-         *    ┌───────────────┴───────────────┐  ┌────────────────┴────────────────┐  ┌───────────────┴────────────────┐
-         *    │ dml-passthrough-empty.service │  │ dml-passthrough-set-dml.service │  │ dml-passthrough-set-ml.service │
-         *    └───────────────────────────────┘  └─────────────────────────────────┘  └────────────────────────────────┘
-         *
-         * 2. dml-override.slice sets DefaultMemoryLow=10. As such, dml-override-empty.service should also
-         *    end up with a memory.low of 10. dml-override.slice should still have a memory.low of 50.
-         *
-         *            ┌───────────┐
-         *            │ dml.slice │
-         *            └─────┬─────┘
-         *         DefaultMemoryLow=10
-         *        ┌─────────┴──────────┐
-         *        │ dml-override.slice │
-         *        └─────────┬──────────┘
-         *           no new settings
-         *    ┌─────────────┴──────────────┐
-         *    │ dml-override-empty.service │
-         *    └────────────────────────────┘
-         *
-         * 3. dml-discard.slice sets DefaultMemoryLow= with no rvalue. As such,
-         *    dml-discard-empty.service should end up with a value of 0.
-         *    dml-discard-set-ml.service sets MemoryLow=15, and as such should have that override the
-         *    reset DefaultMemoryLow value. dml-discard.slice should still have an eventual memory.low of 50.
-         *
-         *                           ┌───────────┐
-         *                           │ dml.slice │
-         *                           └─────┬─────┘
-         *                         DefaultMemoryLow=
-         *                       ┌─────────┴─────────┐
-         *                       │ dml-discard.slice │
-         *                       └─────────┬─────────┘
-         *                  ┌──────────────┴───────────────┐
-         *           no new settings                  MemoryLow=15
-         *    ┌─────────────┴─────────────┐  ┌─────────────┴──────────────┐
-         *    │ dml-discard-empty.service │  │ dml-discard-set-ml.service │
-         *    └───────────────────────────┘  └────────────────────────────┘
-         */
-        ASSERT_OK(manager_load_startable_unit_or_warn(m, "dml.slice", NULL, &dml));
-
-        ASSERT_OK(manager_load_startable_unit_or_warn(m, "dml-passthrough.slice", NULL, &dml_passthrough));
-        assert_se(UNIT_GET_SLICE(dml_passthrough) == dml);
-        ASSERT_OK(manager_load_startable_unit_or_warn(m, "dml-passthrough-empty.service", NULL, &dml_passthrough_empty));
-        assert_se(UNIT_GET_SLICE(dml_passthrough_empty) == dml_passthrough);
-        ASSERT_OK(manager_load_startable_unit_or_warn(m, "dml-passthrough-set-dml.service", NULL, &dml_passthrough_set_dml));
-        assert_se(UNIT_GET_SLICE(dml_passthrough_set_dml) == dml_passthrough);
-        ASSERT_OK(manager_load_startable_unit_or_warn(m, "dml-passthrough-set-ml.service", NULL, &dml_passthrough_set_ml));
-        assert_se(UNIT_GET_SLICE(dml_passthrough_set_ml) == dml_passthrough);
-
-        ASSERT_OK(manager_load_startable_unit_or_warn(m, "dml-override.slice", NULL, &dml_override));
-        assert_se(UNIT_GET_SLICE(dml_override) == dml);
-        ASSERT_OK(manager_load_startable_unit_or_warn(m, "dml-override-empty.service", NULL, &dml_override_empty));
-        assert_se(UNIT_GET_SLICE(dml_override_empty) == dml_override);
-
-        ASSERT_OK(manager_load_startable_unit_or_warn(m, "dml-discard.slice", NULL, &dml_discard));
-        assert_se(UNIT_GET_SLICE(dml_discard) == dml);
-        ASSERT_OK(manager_load_startable_unit_or_warn(m, "dml-discard-empty.service", NULL, &dml_discard_empty));
-        assert_se(UNIT_GET_SLICE(dml_discard_empty) == dml_discard);
-        ASSERT_OK(manager_load_startable_unit_or_warn(m, "dml-discard-set-ml.service", NULL, &dml_discard_set_ml));
-        assert_se(UNIT_GET_SLICE(dml_discard_set_ml) == dml_discard);
-
-        assert_se(root = UNIT_GET_SLICE(dml));
-        assert_se(!UNIT_GET_SLICE(root));
-
-        assert_se(unit_get_ancestor_memory_low(root) == CGROUP_LIMIT_MIN);
-
-        assert_se(unit_get_ancestor_memory_low(dml) == CGROUP_LIMIT_MIN);
-        dml_tree_default = unit_get_cgroup_context(dml)->default_memory_low;
-        assert_se(dml_tree_default == 50);
-
-        assert_se(unit_get_ancestor_memory_low(dml_passthrough) == 100);
-        assert_se(unit_get_ancestor_memory_low(dml_passthrough_empty) == dml_tree_default);
-        assert_se(unit_get_ancestor_memory_low(dml_passthrough_set_dml) == 50);
-        assert_se(unit_get_ancestor_memory_low(dml_passthrough_set_ml) == 0);
-
-        assert_se(unit_get_ancestor_memory_low(dml_override) == dml_tree_default);
-        assert_se(unit_get_ancestor_memory_low(dml_override_empty) == 10);
-
-        assert_se(unit_get_ancestor_memory_low(dml_discard) == dml_tree_default);
-        assert_se(unit_get_ancestor_memory_low(dml_discard_empty) == CGROUP_LIMIT_MIN);
-        assert_se(unit_get_ancestor_memory_low(dml_discard_set_ml) == 15);
-
-        return 0;
-}
-
-DEFINE_TEST_MAIN(LOG_DEBUG);
index b1d5421f671846f76e0c0aa2152dfb27ec40efc6..6c7fd666a08a56ad57fa11ce6ba08d8394913e12 100644 (file)
@@ -332,7 +332,6 @@ if install_tests
                 'journal-data',
                 'knot-data',
                 'test-cgroup-mask',
-                'test-cgroup-unit-default',
                 'test-engine',
                 'test-execute',
                 'test-fstab-generator',
diff --git a/test/test-cgroup-unit-default/dml-discard-empty.service b/test/test-cgroup-unit-default/dml-discard-empty.service
deleted file mode 100644 (file)
index c176989..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# SPDX-License-Identifier: LGPL-2.1-or-later
-[Unit]
-Description=DML discard empty service
-
-[Service]
-Slice=dml-discard.slice
-Type=oneshot
-ExecStart=true
diff --git a/test/test-cgroup-unit-default/dml-discard-set-ml.service b/test/test-cgroup-unit-default/dml-discard-set-ml.service
deleted file mode 100644 (file)
index 0fba2ac..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-# SPDX-License-Identifier: LGPL-2.1-or-later
-[Unit]
-Description=DML discard set ml service
-
-[Service]
-Slice=dml-discard.slice
-Type=oneshot
-ExecStart=true
-MemoryLow=15
diff --git a/test/test-cgroup-unit-default/dml-discard.slice b/test/test-cgroup-unit-default/dml-discard.slice
deleted file mode 100644 (file)
index dc8a397..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-# SPDX-License-Identifier: LGPL-2.1-or-later
-[Unit]
-Description=DML discard slice
-
-[Slice]
-DefaultMemoryLow=
diff --git a/test/test-cgroup-unit-default/dml-override-empty.service b/test/test-cgroup-unit-default/dml-override-empty.service
deleted file mode 100644 (file)
index 5f0c143..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# SPDX-License-Identifier: LGPL-2.1-or-later
-[Unit]
-Description=DML override empty service
-
-[Service]
-Slice=dml-override.slice
-Type=oneshot
-ExecStart=true
diff --git a/test/test-cgroup-unit-default/dml-override.slice b/test/test-cgroup-unit-default/dml-override.slice
deleted file mode 100644 (file)
index ac664d1..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-# SPDX-License-Identifier: LGPL-2.1-or-later
-[Unit]
-Description=DML override slice
-
-[Slice]
-DefaultMemoryLow=10
diff --git a/test/test-cgroup-unit-default/dml-passthrough-empty.service b/test/test-cgroup-unit-default/dml-passthrough-empty.service
deleted file mode 100644 (file)
index 8966226..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# SPDX-License-Identifier: LGPL-2.1-or-later
-[Unit]
-Description=DML passthrough empty service
-
-[Service]
-Slice=dml-passthrough.slice
-Type=oneshot
-ExecStart=true
diff --git a/test/test-cgroup-unit-default/dml-passthrough-set-dml.service b/test/test-cgroup-unit-default/dml-passthrough-set-dml.service
deleted file mode 100644 (file)
index ec82174..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-# SPDX-License-Identifier: LGPL-2.1-or-later
-[Unit]
-Description=DML passthrough set DML service
-
-[Service]
-Slice=dml-passthrough.slice
-Type=oneshot
-ExecStart=true
-DefaultMemoryLow=15
diff --git a/test/test-cgroup-unit-default/dml-passthrough-set-ml.service b/test/test-cgroup-unit-default/dml-passthrough-set-ml.service
deleted file mode 100644 (file)
index 63ec305..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-# SPDX-License-Identifier: LGPL-2.1-or-later
-[Unit]
-Description=DML passthrough set ML service
-
-[Service]
-Slice=dml-passthrough.slice
-Type=oneshot
-ExecStart=true
-MemoryLow=0
diff --git a/test/test-cgroup-unit-default/dml-passthrough.slice b/test/test-cgroup-unit-default/dml-passthrough.slice
deleted file mode 100644 (file)
index 1c8769d..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-# SPDX-License-Identifier: LGPL-2.1-or-later
-[Unit]
-Description=DML passthrough slice
-
-[Slice]
-MemoryLow=100
diff --git a/test/test-cgroup-unit-default/dml.slice b/test/test-cgroup-unit-default/dml.slice
deleted file mode 100644 (file)
index 8e00e7f..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-# SPDX-License-Identifier: LGPL-2.1-or-later
-[Unit]
-Description=DML slice
-
-[Slice]
-DefaultMemoryLow=50