1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-03-11 04:58:19 +03:00

psi-util: fix error handling

We checked ERRNO_IS_NOT_SUPPORTED on a possible positive non-error code,
which isn't right.

Fix that. Also add caching, since we are about to call this more often.

(cherry picked from commit 90ec8ebe33ec72ed6d9f451de9443d67dd351d72)
(cherry picked from commit 5ee19fdfa054f68e82cedbbff26d60c893ca5ef4)
(cherry picked from commit 8e6234064d3339f3043d2bc42dd8d493d656f08e)
(cherry picked from commit cb4f512f47c3ed10703c5abd8cd650c2eea81211)
This commit is contained in:
Lennart Poettering 2023-02-27 19:02:41 +01:00 committed by Luca Boccassi
parent 5d0fb9483a
commit fadf3c4099

View File

@ -106,20 +106,25 @@ int read_resource_pressure(const char *path, PressureType type, ResourcePressure
}
int is_pressure_supported(void) {
static thread_local int cached = -1;
const char *p;
/* The pressure files, both under /proc and in cgroups, will exist
* even if the kernel has PSI support disabled; we have to read
* the file to make sure it doesn't return -EOPNOTSUPP */
FOREACH_STRING(p, "/proc/pressure/cpu", "/proc/pressure/io", "/proc/pressure/memory") {
int r;
/* The pressure files, both under /proc/ and in cgroups, will exist even if the kernel has PSI
* support disabled; we have to read the file to make sure it doesn't return -EOPNOTSUPP */
if (cached >= 0)
return cached;
FOREACH_STRING(p, "/proc/pressure/cpu", "/proc/pressure/io", "/proc/pressure/memory") {
r = read_virtual_file(p, 0, NULL, NULL);
if (r < 0) {
if (r == -ENOENT || ERRNO_IS_NOT_SUPPORTED(r))
return 0;
if (r < 0)
return (cached = false);
return r;
}
return 1;
}
return (cached = true);
}