7485f5be0c
This package is the userspace daemon, client tool, and library for the team device implementation in the Linux kernel. Team is an alternative to the traditional bonding driver and provides more "runners", or modes, of operation for aggregates. None of these modes are enabled by default and need a custom kernel config. Backported the three most relevant patches to fix musl build, revert of a fix prior to 1.31 that can cause high CPU load, and a fix to prevent failing to stop the daemon due to too short timeout for kill command. Signed-off-by: Joachim Wiberg <troglobit@gmail.com> [yann.morin.1998@free.fr: slight reword in help text] Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
52 lines
1.6 KiB
Diff
52 lines
1.6 KiB
Diff
From 61efd6de2fbb8ee077863ee5a355ac3dfd9365b9 Mon Sep 17 00:00:00 2001
|
|
From: Xin Long <lucien.xin@gmail.com>
|
|
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 <jiri@nvidia.com>
|
|
---
|
|
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;
|