mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-08-29 01:50:15 +03:00
Merge pull request #9484 from poettering/permille-everywhere
Permille everywhere
This commit is contained in:
@ -637,6 +637,8 @@ int parse_permille_unbounded(const char *p) {
|
||||
r = safe_atoi(n, &v);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (v < 0)
|
||||
return -ERANGE;
|
||||
} else {
|
||||
pc = endswith(p, "%");
|
||||
if (!pc)
|
||||
@ -657,15 +659,14 @@ int parse_permille_unbounded(const char *p) {
|
||||
r = safe_atoi(n, &v);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (v < 0)
|
||||
return -ERANGE;
|
||||
if (v > (INT_MAX - q) / 10)
|
||||
return -ERANGE;
|
||||
|
||||
v = v * 10 + q;
|
||||
}
|
||||
|
||||
if (v < 0)
|
||||
return -ERANGE;
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
|
@ -3013,13 +3013,13 @@ int config_parse_cpu_quota(
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = parse_percent_unbounded(rvalue);
|
||||
r = parse_permille_unbounded(rvalue);
|
||||
if (r <= 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Invalid CPU quota '%s', ignoring.", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
c->cpu_quota_per_sec_usec = ((usec_t) r * USEC_PER_SEC) / 100U;
|
||||
c->cpu_quota_per_sec_usec = ((usec_t) r * USEC_PER_SEC) / 1000U;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -3041,7 +3041,7 @@ int config_parse_memory_limit(
|
||||
|
||||
if (!isempty(rvalue) && !streq(rvalue, "infinity")) {
|
||||
|
||||
r = parse_percent(rvalue);
|
||||
r = parse_permille(rvalue);
|
||||
if (r < 0) {
|
||||
r = parse_size(rvalue, 1024, &bytes);
|
||||
if (r < 0) {
|
||||
@ -3049,7 +3049,7 @@ int config_parse_memory_limit(
|
||||
return 0;
|
||||
}
|
||||
} else
|
||||
bytes = physical_memory_scale(r, 100U);
|
||||
bytes = physical_memory_scale(r, 1000U);
|
||||
|
||||
if (bytes >= UINT64_MAX ||
|
||||
(bytes <= 0 && !streq(lvalue, "MemorySwapMax"))) {
|
||||
@ -3102,7 +3102,7 @@ int config_parse_tasks_max(
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = parse_percent(rvalue);
|
||||
r = parse_permille(rvalue);
|
||||
if (r < 0) {
|
||||
r = safe_atou64(rvalue, &v);
|
||||
if (r < 0) {
|
||||
@ -3110,7 +3110,7 @@ int config_parse_tasks_max(
|
||||
return 0;
|
||||
}
|
||||
} else
|
||||
v = system_tasks_max_scale(r, 100U);
|
||||
v = system_tasks_max_scale(r, 1000U);
|
||||
|
||||
if (v <= 0 || v >= UINT64_MAX) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Maximum tasks value '%s' out of range, ignoring.", rvalue);
|
||||
|
@ -711,9 +711,9 @@ int config_parse_tmpfs_size(
|
||||
assert(data);
|
||||
|
||||
/* First, try to parse as percentage */
|
||||
r = parse_percent(rvalue);
|
||||
if (r > 0 && r < 100)
|
||||
*sz = physical_memory_scale(r, 100U);
|
||||
r = parse_permille(rvalue);
|
||||
if (r > 0 && r < 1000)
|
||||
*sz = physical_memory_scale(r, 1000U);
|
||||
else {
|
||||
uint64_t k;
|
||||
|
||||
|
@ -204,9 +204,9 @@ static int append_session_memory_max(pam_handle_t *handle, sd_bus_message *m, co
|
||||
return r;
|
||||
}
|
||||
} else {
|
||||
r = parse_percent(limit);
|
||||
r = parse_permille(limit);
|
||||
if (r >= 0) {
|
||||
r = sd_bus_message_append(m, "(sv)", "MemoryMaxScale", "u", (uint32_t) (((uint64_t) UINT32_MAX * r) / 100U));
|
||||
r = sd_bus_message_append(m, "(sv)", "MemoryMaxScale", "u", (uint32_t) (((uint64_t) r * UINT32_MAX) / 1000U));
|
||||
if (r < 0) {
|
||||
pam_syslog(handle, LOG_ERR, "Failed to append to bus message: %s", strerror(-r));
|
||||
return r;
|
||||
|
@ -422,16 +422,16 @@ static int bus_append_cgroup_property(sd_bus_message *m, const char *field, cons
|
||||
return 1;
|
||||
}
|
||||
|
||||
r = parse_percent(eq);
|
||||
r = parse_permille(eq);
|
||||
if (r >= 0) {
|
||||
char *n;
|
||||
|
||||
/* When this is a percentage we'll convert this into a relative value in the range
|
||||
* 0…UINT32_MAX and pass it in the MemoryLowScale property (and related
|
||||
* ones). This way the physical memory size can be determined server-side */
|
||||
/* When this is a percentage we'll convert this into a relative value in the range 0…UINT32_MAX
|
||||
* and pass it in the MemoryLowScale property (and related ones). This way the physical memory
|
||||
* size can be determined server-side. */
|
||||
|
||||
n = strjoina(field, "Scale");
|
||||
r = sd_bus_message_append(m, "(sv)", n, "u", (uint32_t) (((uint64_t) UINT32_MAX * r) / 100U));
|
||||
r = sd_bus_message_append(m, "(sv)", n, "u", (uint32_t) (((uint64_t) r * UINT32_MAX) / 1000U));
|
||||
if (r < 0)
|
||||
return bus_log_create_error(r);
|
||||
|
||||
@ -449,13 +449,15 @@ static int bus_append_cgroup_property(sd_bus_message *m, const char *field, cons
|
||||
if (isempty(eq))
|
||||
r = sd_bus_message_append(m, "(sv)", "CPUQuotaPerSecUSec", "t", USEC_INFINITY);
|
||||
else {
|
||||
r = parse_percent_unbounded(eq);
|
||||
if (r <= 0) {
|
||||
log_error_errno(r, "CPU quota '%s' invalid.", eq);
|
||||
return -EINVAL;
|
||||
r = parse_permille_unbounded(eq);
|
||||
if (r == 0) {
|
||||
log_error("CPU quota too small.");
|
||||
return -ERANGE;
|
||||
}
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "CPU quota '%s' invalid.", eq);
|
||||
|
||||
r = sd_bus_message_append(m, "(sv)", "CPUQuotaPerSecUSec", "t", (usec_t) r * USEC_PER_SEC / 100U);
|
||||
r = sd_bus_message_append(m, "(sv)", "CPUQuotaPerSecUSec", "t", (((uint64_t) r * USEC_PER_SEC) / 1000U));
|
||||
}
|
||||
|
||||
if (r < 0)
|
||||
|
Reference in New Issue
Block a user