summaryrefslogtreecommitdiff
path: root/src/core/load-fragment.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2014-05-22 07:06:16 +0900
committerLennart Poettering <lennart@poettering.net>2014-05-22 07:13:56 +0900
commitdb785129c9bce9294a118484cbc9bb6935ca34c2 (patch)
treea1c9508390cffe4eafc0592701ad566bba672b93 /src/core/load-fragment.c
parent95ae05c0e79868c22b3e8e6fbc53432786876730 (diff)
cgroup: rework startup logic
Introduce a (unsigned long) -1 as "unset" state for cpu shares/block io weights, and keep the startup unit set around all the time.
Diffstat (limited to 'src/core/load-fragment.c')
-rw-r--r--src/core/load-fragment.c114
1 files changed, 11 insertions, 103 deletions
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
index da1ab2f912..7c5b49c85b 100644
--- a/src/core/load-fragment.c
+++ b/src/core/load-fragment.c
@@ -2430,47 +2430,7 @@ int config_parse_cpu_shares(
void *data,
void *userdata) {
- CGroupContext *c = data;
- unsigned long lu;
- int r;
-
- assert(filename);
- assert(lvalue);
- assert(rvalue);
-
- if (isempty(rvalue)) {
- c->cpu_shares = 1024;
- return 0;
- }
-
- r = safe_atolu(rvalue, &lu);
- if (r < 0 || lu <= 0) {
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
- "CPU shares '%s' invalid. Ignoring.", rvalue);
- return 0;
- }
-
- c->cpu_shares = lu;
- if (!c->startup_cpu_shares_set)
- c->startup_cpu_shares = lu;
-
- return 0;
-}
-
-int config_parse_startup_cpu_shares(
- const char *unit,
- const char *filename,
- unsigned line,
- const char *section,
- unsigned section_line,
- const char *lvalue,
- int ltype,
- const char *rvalue,
- void *data,
- void *userdata) {
-
- CGroupContext *c = data;
- unsigned long lu;
+ unsigned long *shares = data, lu;
int r;
assert(filename);
@@ -2478,20 +2438,17 @@ int config_parse_startup_cpu_shares(
assert(rvalue);
if (isempty(rvalue)) {
- c->startup_cpu_shares = 1024;
+ *shares = (unsigned long) -1;
return 0;
}
r = safe_atolu(rvalue, &lu);
if (r < 0 || lu <= 0) {
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
- "Startup CPU shares '%s' invalid. Ignoring.", rvalue);
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL, "CPU shares '%s' invalid. Ignoring.", rvalue);
return 0;
}
- c->startup_cpu_shares = lu;
- c->startup_cpu_shares_set = true;
-
+ *shares = lu;
return 0;
}
@@ -2648,47 +2605,7 @@ int config_parse_blockio_weight(
void *data,
void *userdata) {
- CGroupContext *c = data;
- unsigned long lu;
- int r;
-
- assert(filename);
- assert(lvalue);
- assert(rvalue);
-
- if (isempty(rvalue)) {
- c->blockio_weight = 1000;
- return 0;
- }
-
- r = safe_atolu(rvalue, &lu);
- if (r < 0 || lu < 10 || lu > 1000) {
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
- "Block IO weight '%s' invalid. Ignoring.", rvalue);
- return 0;
- }
-
- c->blockio_weight = lu;
- if (!c->startup_blockio_weight_set)
- c->startup_blockio_weight = lu;
-
- return 0;
-}
-
-int config_parse_startup_blockio_weight(
- const char *unit,
- const char *filename,
- unsigned line,
- const char *section,
- unsigned section_line,
- const char *lvalue,
- int ltype,
- const char *rvalue,
- void *data,
- void *userdata) {
-
- CGroupContext *c = data;
- unsigned long lu;
+ unsigned long *weight = data, lu;
int r;
assert(filename);
@@ -2696,20 +2613,17 @@ int config_parse_startup_blockio_weight(
assert(rvalue);
if (isempty(rvalue)) {
- c->startup_blockio_weight = 1000;
+ *weight = (unsigned long) -1;
return 0;
}
r = safe_atolu(rvalue, &lu);
if (r < 0 || lu < 10 || lu > 1000) {
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
- "Startup Block IO weight '%s' invalid. Ignoring.", rvalue);
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Block IO weight '%s' invalid. Ignoring.", rvalue);
return 0;
}
- c->startup_blockio_weight = lu;
- c->startup_blockio_weight_set = true;
-
+ *weight = lu;
return 0;
}
@@ -2747,8 +2661,7 @@ int config_parse_blockio_device_weight(
n = strcspn(rvalue, WHITESPACE);
weight = rvalue + n;
if (!*weight) {
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
- "Expected block device and device weight. Ignoring.");
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Expected block device and device weight. Ignoring.");
return 0;
}
@@ -2757,20 +2670,17 @@ int config_parse_blockio_device_weight(
return log_oom();
if (!path_startswith(path, "/dev")) {
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
- "Invalid device node path '%s'. Ignoring.", path);
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Invalid device node path '%s'. Ignoring.", path);
return 0;
}
weight += strspn(weight, WHITESPACE);
r = safe_atolu(weight, &lu);
if (r < 0 || lu < 10 || lu > 1000) {
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
- "Block IO weight '%s' invalid. Ignoring.", rvalue);
+ log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Block IO weight '%s' invalid. Ignoring.", rvalue);
return 0;
}
-
w = new0(CGroupBlockIODeviceWeight, 1);
if (!w)
return log_oom();
@@ -3526,13 +3436,11 @@ void unit_dump_config_items(FILE *f) {
{ config_parse_address_families, "FAMILIES" },
#endif
{ config_parse_cpu_shares, "SHARES" },
- { config_parse_startup_cpu_shares, "STARTUPSHARES" },
{ config_parse_memory_limit, "LIMIT" },
{ config_parse_device_allow, "DEVICE" },
{ config_parse_device_policy, "POLICY" },
{ config_parse_blockio_bandwidth, "BANDWIDTH" },
{ config_parse_blockio_weight, "WEIGHT" },
- { config_parse_startup_blockio_weight, "STARTUPWEIGHT" },
{ config_parse_blockio_device_weight, "DEVICEWEIGHT" },
{ config_parse_long, "LONG" },
{ config_parse_socket_service, "SERVICE" },