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:
parent
5d0fb9483a
commit
fadf3c4099
@ -106,20 +106,25 @@ int read_resource_pressure(const char *path, PressureType type, ResourcePressure
|
|||||||
}
|
}
|
||||||
|
|
||||||
int is_pressure_supported(void) {
|
int is_pressure_supported(void) {
|
||||||
|
static thread_local int cached = -1;
|
||||||
const char *p;
|
const char *p;
|
||||||
|
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;
|
||||||
|
|
||||||
/* 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") {
|
FOREACH_STRING(p, "/proc/pressure/cpu", "/proc/pressure/io", "/proc/pressure/memory") {
|
||||||
int r;
|
|
||||||
|
|
||||||
r = read_virtual_file(p, 0, NULL, NULL);
|
r = read_virtual_file(p, 0, NULL, NULL);
|
||||||
if (r == -ENOENT || ERRNO_IS_NOT_SUPPORTED(r))
|
if (r < 0) {
|
||||||
return 0;
|
if (r == -ENOENT || ERRNO_IS_NOT_SUPPORTED(r))
|
||||||
if (r < 0)
|
return (cached = false);
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return (cached = true);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user