diff --git a/backport-psi-util-fix-error-handling.patch b/backport-psi-util-fix-error-handling.patch new file mode 100644 index 0000000000000000000000000000000000000000..209857b3d65da17f6f6ba8c9eb94c2bf5d2b97fa --- /dev/null +++ b/backport-psi-util-fix-error-handling.patch @@ -0,0 +1,60 @@ +From 90ec8ebe33ec72ed6d9f451de9443d67dd351d72 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 27 Feb 2023 19:02:41 +0100 +Subject: [PATCH] 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. + +Reference: https://github.com/systemd/systemd/pull/26610/commits/1ea90a9d409999159345ad8e193f7ef4cc7f634d + +Signed-off-by: zhaoxiaohu +Signed-off-by: yuwang +--- + src/shared/psi-util.c | 23 ++++++++++++++--------- + 1 file changed, 14 insertions(+), 9 deletions(-) + +diff --git a/src/shared/psi-util.c b/src/shared/psi-util.c +index 009095e..9045ae2 100644 +--- a/src/shared/psi-util.c ++++ b/src/shared/psi-util.c +@@ -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; ++ 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 */ +- 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 == -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); + } +-- +2.33.0 + diff --git a/systemd.spec b/systemd.spec index 658d172fdab5913b007ccdfed490a03f82ad8a7a..e539f4d253c18d3f4e0983b7786e9f297f73646b 100644 --- a/systemd.spec +++ b/systemd.spec @@ -25,7 +25,7 @@ Name: systemd Url: https://systemd.io/ Version: 249 -Release: 92 +Release: 93 License: MIT and LGPLv2+ and GPLv2+ Summary: System and Service Manager @@ -695,6 +695,7 @@ Patch6642: backport-sysusers-insist-that-root-group-is-0.patch Patch6643: backport-importd-Always-specify-file-unpacked-by-tar.patch Patch6644: backport-docs-remove-dev-tty-confusion.patch Patch6645: backport-wait-online-make-manager_link_is_online-return-0-whe.patch +Patch6646: backport-psi-util-fix-error-handling.patch Patch9001: update-rtc-with-system-clock-when-shutdown.patch Patch9002: udev-add-actions-while-rename-netif-failed.patch @@ -2209,6 +2210,9 @@ grep -q -E '^KEYMAP="?fi-latin[19]"?' /etc/vconsole.conf 2>/dev/null && /usr/bin/systemd-cryptenroll %changelog +* Wed Dec 04 2024 zhangyao - 249-93 +- add backport-psi-util-fix-error-handling.patch + * Wed Dec 04 2024 zhangyao - 249-92 - wait-online: fix handling of unmanaged state - add backport-wait-online-make-manager_link_is_online-return-0-whe.patch