From d6e81333025ffdf9d224d52bae5b67b7ef0835b7 Mon Sep 17 00:00:00 2001 From: fly_fzc <2385803914@qq.com> Date: Wed, 11 Oct 2023 15:59:19 +0800 Subject: [PATCH] fix an issue about teamd is using 100% cpu usage (of 1 core) --- ...regard-current-state-when-considerin.patch | 54 +++++++++++++++++++ libteam.spec | 6 ++- 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 backport-revert-teamd-Disregard-current-state-when-considerin.patch diff --git a/backport-revert-teamd-Disregard-current-state-when-considerin.patch b/backport-revert-teamd-Disregard-current-state-when-considerin.patch new file mode 100644 index 0000000..061d82d --- /dev/null +++ b/backport-revert-teamd-Disregard-current-state-when-considerin.patch @@ -0,0 +1,54 @@ +From 61efd6de2fbb8ee077863ee5a355ac3dfd9365b9 Mon Sep 17 00:00:00 2001 +From: Xin Long +Date: Tue, 1 Sep 2020 13:59:27 +0800 +Subject: [PATCH] Revert "teamd: Disregard current state when considering port + enablement" + +This reverts commit deadb5b715227429a1879b187f5906b39151eca9. + +As Patrick noticed, with that commit, teamd_port_check_enable() +would set the team port to the new state unconditionally, which +triggers another change message from kernel to userspace, then +teamd_port_check_enable() is called again to set the team port +to the new state. + +This would go around and around to update the team port state, +and even cause teamd to consume 100% cpu. + +As the issue caused by that commit is serious, it has to be +reverted. As for the issued fixed by that commit, I would +propose a new fix later. + +Signed-off-by: Jiri Pirko +--- + teamd/teamd_per_port.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/teamd/teamd_per_port.c b/teamd/teamd_per_port.c +index 166da57..d429753 100644 +--- a/teamd/teamd_per_port.c ++++ b/teamd/teamd_per_port.c +@@ -442,14 +442,18 @@ int teamd_port_check_enable(struct teamd_context *ctx, + bool should_enable, bool should_disable) + { + bool new_enabled_state; ++ bool curr_enabled_state; + int err; + + if (!teamd_port_present(ctx, tdport)) + return 0; ++ err = teamd_port_enabled(ctx, tdport, &curr_enabled_state); ++ if (err) ++ return err; + +- if (should_enable) ++ if (!curr_enabled_state && should_enable) + new_enabled_state = true; +- else if (should_disable) ++ else if (curr_enabled_state && should_disable) + new_enabled_state = false; + else + return 0; +-- +2.33.0 + diff --git a/libteam.spec b/libteam.spec index eb66148..1b10c90 100644 --- a/libteam.spec +++ b/libteam.spec @@ -1,12 +1,13 @@ Name: libteam Version: 1.30 -Release: 2 +Release: 3 Summary: User-space counterpart library for team network License: LGPLv2+ URL: http://www.libteam.org Source: http://www.libteam.org/files/libteam-%{version}.tar.gz Patch0: libteam-fix-error-options-in-doc.patch +Patch1: backport-revert-teamd-Disregard-current-state-when-considerin.patch BuildRequires: gcc jansson-devel libdaemon-devel libnl3-devel BuildRequires: swig python2-devel dbus-devel systemd doxygen @@ -138,6 +139,9 @@ popd %{_mandir}/man8/teamnl.8* %changelog +* Wed Oct 11 2023 fuanan - 1.30-3 +- fix an issue about teamd is using 100% cpu usage (of 1 core) + * Fri Sep 9 2022 yixiangzhike - 1.30-2 - fix error options in doc -- Gitee