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 <>
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 @@
 			    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;
 		return 0;