From: Yu Watanabe Date: Tue, 19 Dec 2017 09:14:39 +0000 (+0900) Subject: dbus-cgroup: merge several blocks which operate almost same tasks X-Git-Tag: v237~183^2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=13ec20d42a7b7abfbcbca5c6f1ec487fd3e3def8;p=thirdparty%2Fsystemd.git dbus-cgroup: merge several blocks which operate almost same tasks --- diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c index 70dca6cf1b0..30e8f16efd7 100644 --- a/src/core/dbus-cgroup.c +++ b/src/core/dbus-cgroup.c @@ -446,7 +446,7 @@ int bus_cgroup_set_property( return 1; - } else if (streq(name, "CPUWeight")) { + } else if (STR_IN_SET(name, "CPUWeight", "StartupCPUWeight")) { uint64_t weight; r = sd_bus_message_read(message, "t", &weight); @@ -454,43 +454,25 @@ int bus_cgroup_set_property( return r; if (!CGROUP_WEIGHT_IS_OK(weight)) - return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "CPUWeight= value out of range"); + return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "%s= value out of range", name); if (!UNIT_WRITE_FLAGS_NOOP(flags)) { - c->cpu_weight = weight; - unit_invalidate_cgroup(u, CGROUP_MASK_CPU); - - if (weight == CGROUP_WEIGHT_INVALID) - unit_write_setting(u, flags, name, "CPUWeight="); - else - unit_write_settingf(u, flags, name, "CPUWeight=%" PRIu64, weight); - } - - return 1; - - } else if (streq(name, "StartupCPUWeight")) { - uint64_t weight; - - r = sd_bus_message_read(message, "t", &weight); - if (r < 0) - return r; + if (streq(name, "CPUWeight")) + c->cpu_weight = weight; + else /* "StartupCPUWeight" */ + c->startup_cpu_weight = weight; - if (!CGROUP_WEIGHT_IS_OK(weight)) - return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "StartupCPUWeight= value out of range"); - - if (!UNIT_WRITE_FLAGS_NOOP(flags)) { - c->startup_cpu_weight = weight; unit_invalidate_cgroup(u, CGROUP_MASK_CPU); - if (weight == CGROUP_CPU_SHARES_INVALID) - unit_write_setting(u, flags, name, "StartupCPUWeight="); + if (weight == CGROUP_WEIGHT_INVALID) + unit_write_settingf(u, flags, name, "%s=", name); else - unit_write_settingf(u, flags, name, "StartupCPUWeight=%" PRIu64, weight); + unit_write_settingf(u, flags, name, "%s=%" PRIu64, name, weight); } return 1; - } else if (streq(name, "CPUShares")) { + } else if (STR_IN_SET(name, "CPUShares", "StartupCPUShares")) { uint64_t shares; r = sd_bus_message_read(message, "t", &shares); @@ -498,38 +480,20 @@ int bus_cgroup_set_property( return r; if (!CGROUP_CPU_SHARES_IS_OK(shares)) - return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "CPUShares= value out of range"); + return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "%s= value out of range", name); if (!UNIT_WRITE_FLAGS_NOOP(flags)) { - c->cpu_shares = shares; - unit_invalidate_cgroup(u, CGROUP_MASK_CPU); - - if (shares == CGROUP_CPU_SHARES_INVALID) - unit_write_setting(u, flags, name, "CPUShares="); - else - unit_write_settingf(u, flags, name, "CPUShares=%" PRIu64, shares); - } - - return 1; - - } else if (streq(name, "StartupCPUShares")) { - uint64_t shares; - - r = sd_bus_message_read(message, "t", &shares); - if (r < 0) - return r; - - if (!CGROUP_CPU_SHARES_IS_OK(shares)) - return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "StartupCPUShares= value out of range"); + if (streq(name, "CPUShares")) + c->cpu_shares = shares; + else /* "StartupCPUShares" */ + c->startup_cpu_shares = shares; - if (!UNIT_WRITE_FLAGS_NOOP(flags)) { - c->startup_cpu_shares = shares; unit_invalidate_cgroup(u, CGROUP_MASK_CPU); if (shares == CGROUP_CPU_SHARES_INVALID) - unit_write_setting(u, flags, name, "StartupCPUShares="); + unit_write_settingf(u, flags, name, "%s=", name); else - unit_write_settingf(u, flags, name, "StartupCPUShares=%" PRIu64, shares); + unit_write_settingf(u, flags, name, "%s=%" PRIu64, name, shares); } return 1; @@ -575,7 +539,7 @@ int bus_cgroup_set_property( return 1; - } else if (streq(name, "IOWeight")) { + } else if (STR_IN_SET(name, "IOWeight", "StartupIOWeight")) { uint64_t weight; r = sd_bus_message_read(message, "t", &weight); @@ -583,38 +547,20 @@ int bus_cgroup_set_property( return r; if (!CGROUP_WEIGHT_IS_OK(weight)) - return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "IOWeight= value out of range"); + return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "%s= value out of range", name); if (!UNIT_WRITE_FLAGS_NOOP(flags)) { - c->io_weight = weight; - unit_invalidate_cgroup(u, CGROUP_MASK_IO); - - if (weight == CGROUP_WEIGHT_INVALID) - unit_write_setting(u, flags, name, "IOWeight="); - else - unit_write_settingf(u, flags, name, "IOWeight=%" PRIu64, weight); - } + if (streq(name, "IOWeight")) + c->io_weight = weight; + else /* "StartupIOWeight" */ + c->startup_io_weight = weight; - return 1; - - } else if (streq(name, "StartupIOWeight")) { - uint64_t weight; - - r = sd_bus_message_read(message, "t", &weight); - if (r < 0) - return r; - - if (CGROUP_WEIGHT_IS_OK(weight)) - return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "StartupIOWeight= value out of range"); - - if (!UNIT_WRITE_FLAGS_NOOP(flags)) { - c->startup_io_weight = weight; unit_invalidate_cgroup(u, CGROUP_MASK_IO); if (weight == CGROUP_WEIGHT_INVALID) - unit_write_setting(u, flags, name, "StartupIOWeight="); + unit_write_settingf(u, flags, name, "%s=", name); else - unit_write_settingf(u, flags, name, "StartupIOWeight=%" PRIu64, weight); + unit_write_settingf(u, flags, name, "%s=%" PRIu64, name, weight); } return 1; @@ -802,7 +748,7 @@ int bus_cgroup_set_property( return 1; - } else if (streq(name, "BlockIOWeight")) { + } else if (STR_IN_SET(name, "BlockIOWeight", "StartupBlockIOWeight")) { uint64_t weight; r = sd_bus_message_read(message, "t", &weight); @@ -810,38 +756,20 @@ int bus_cgroup_set_property( return r; if (!CGROUP_BLKIO_WEIGHT_IS_OK(weight)) - return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "BlockIOWeight= value out of range"); + return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "%s= value out of range", name); if (!UNIT_WRITE_FLAGS_NOOP(flags)) { - c->blockio_weight = weight; - unit_invalidate_cgroup(u, CGROUP_MASK_BLKIO); - - if (weight == CGROUP_BLKIO_WEIGHT_INVALID) - unit_write_setting(u, flags, name, "BlockIOWeight="); - else - unit_write_settingf(u, flags, name, "BlockIOWeight=%" PRIu64, weight); - } - - return 1; - - } else if (streq(name, "StartupBlockIOWeight")) { - uint64_t weight; - - r = sd_bus_message_read(message, "t", &weight); - if (r < 0) - return r; - - if (!CGROUP_BLKIO_WEIGHT_IS_OK(weight)) - return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "StartupBlockIOWeight= value out of range"); + if (streq(name, "BlockIOWeight")) + c->blockio_weight = weight; + else /* "StartupBlockIOWeight" */ + c->startup_blockio_weight = weight; - if (!UNIT_WRITE_FLAGS_NOOP(flags)) { - c->startup_blockio_weight = weight; unit_invalidate_cgroup(u, CGROUP_MASK_BLKIO); if (weight == CGROUP_BLKIO_WEIGHT_INVALID) - unit_write_setting(u, flags, name, "StartupBlockIOWeight="); + unit_write_settingf(u, flags, name, "%s=", name); else - unit_write_settingf(u, flags, name, "StartupBlockIOWeight=%" PRIu64, weight); + unit_write_settingf(u, flags, name, "%s=%" PRIu64, name, weight); } return 1; @@ -1046,7 +974,7 @@ int bus_cgroup_set_property( return 1; - } else if (STR_IN_SET(name, "MemoryLow", "MemoryHigh", "MemoryMax", "MemorySwapMax")) { + } else if (STR_IN_SET(name, "MemoryLow", "MemoryHigh", "MemoryMax", "MemorySwapMax", "MemoryLimit")) { uint64_t v; r = sd_bus_message_read(message, "t", &v); @@ -1062,8 +990,10 @@ int bus_cgroup_set_property( c->memory_high = v; else if (streq(name, "MemorySwapMax")) c->memory_swap_max = v; - else + else if (streq(name, "MemoryMax")) c->memory_max = v; + else /* "MemoryLimit" */ + c->memory_limit = v; unit_invalidate_cgroup(u, CGROUP_MASK_MEMORY); @@ -1075,7 +1005,7 @@ int bus_cgroup_set_property( return 1; - } else if (STR_IN_SET(name, "MemoryLowScale", "MemoryHighScale", "MemoryMaxScale", "MemorySwapMaxScale")) { + } else if (STR_IN_SET(name, "MemoryLowScale", "MemoryHighScale", "MemoryMaxScale", "MemorySwapMaxScale", "MemoryLimitScale")) { uint32_t raw; uint64_t v; @@ -1098,10 +1028,12 @@ int bus_cgroup_set_property( c->memory_low = v; else if (streq(name, "MemoryHigh")) c->memory_high = v; - else if (streq(name, "MemorySwapMaxScale")) + else if (streq(name, "MemorySwapMax")) c->memory_swap_max = v; - else /* MemoryMax */ + else if (streq(name, "MemoryMax")) c->memory_max = v; + else /* "MemoryLimit" */ + c->memory_limit = v; unit_invalidate_cgroup(u, CGROUP_MASK_MEMORY); unit_write_settingf(u, flags, name, "%s=%" PRIu32 "%%", name, @@ -1110,48 +1042,6 @@ int bus_cgroup_set_property( return 1; - } else if (streq(name, "MemoryLimit")) { - uint64_t limit; - - r = sd_bus_message_read(message, "t", &limit); - if (r < 0) - return r; - if (limit <= 0) - return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "%s= is too small", name); - - if (!UNIT_WRITE_FLAGS_NOOP(flags)) { - c->memory_limit = limit; - unit_invalidate_cgroup(u, CGROUP_MASK_MEMORY); - - if (limit == CGROUP_LIMIT_MAX) - unit_write_setting(u, flags, name, "MemoryLimit=infinity"); - else - unit_write_settingf(u, flags, name, "MemoryLimit=%" PRIu64, limit); - } - - return 1; - - } else if (streq(name, "MemoryLimitScale")) { - uint64_t limit; - uint32_t raw; - - r = sd_bus_message_read(message, "u", &raw); - if (r < 0) - return r; - - limit = physical_memory_scale(raw, UINT32_MAX); - if (limit <= 0 || limit == UINT64_MAX) - return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "%s= is out of range", name); - - if (!UNIT_WRITE_FLAGS_NOOP(flags)) { - c->memory_limit = limit; - unit_invalidate_cgroup(u, CGROUP_MASK_MEMORY); - unit_write_settingf(u, flags, "MemoryLimit", "MemoryLimit=%" PRIu32 "%%", - (uint32_t) (DIV_ROUND_UP((uint64_t) raw * 100U, (uint64_t) UINT32_MAX))); - } - - return 1; - } else if (streq(name, "DevicePolicy")) { const char *policy; CGroupDevicePolicy p; @@ -1460,12 +1350,8 @@ int bus_cgroup_set_property( return 1; } - if (u->transient && u->load_state == UNIT_STUB) { - r = bus_cgroup_set_transient_property(u, c, name, message, flags, error); - if (r != 0) - return r; - - } + if (u->transient && u->load_state == UNIT_STUB) + return bus_cgroup_set_transient_property(u, c, name, message, flags, error); return 0; }