mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-10-26 08:55:18 +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 90ec8ebe33
)
This commit is contained in:
parent
9ffa0d439f
commit
5ee19fdfa0
@ -106,18 +106,24 @@ int read_resource_pressure(const char *path, PressureType type, ResourcePressure
|
||||
}
|
||||
|
||||
int is_pressure_supported(void) {
|
||||
/* 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;
|
||||
static thread_local int cached = -1;
|
||||
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 == -ENOENT || ERRNO_IS_NOT_SUPPORTED(r))
|
||||
return 0;
|
||||
if (r < 0)
|
||||
if (r < 0) {
|
||||
if (r == -ENOENT || ERRNO_IS_NOT_SUPPORTED(r))
|
||||
return (cached = false);
|
||||
|
||||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
return (cached = true);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user