teamd: lacp: make sure that lacp_port_agg_update() works with correct unselectable state

In case of checking unselectable port state, lacp_port_agg_update()
is checking the new one during port state change. This is wrong as it
should check the old one. Move the state setting into
lacp_port_agg_update() and rename the function accordingly.

Signed-off-by: Jiri Pirko <jiri@nvidia.com>
diff --git a/teamd/teamd_runner_lacp.c b/teamd/teamd_runner_lacp.c
index 2bb1a80..d414bb4 100644
--- a/teamd/teamd_runner_lacp.c
+++ b/teamd/teamd_runner_lacp.c
@@ -747,7 +747,8 @@
 	       lacp_get_agg_lead(lacp_port) != lacp_port;
 }
 
-static int lacp_port_agg_update(struct lacp_port *lacp_port)
+static int lacp_port_set_state_agg_update(struct lacp_port *lacp_port,
+					  enum lacp_port_state new_state)
 {
 	if (lacp_port_selected(lacp_port) &&
 	    (lacp_port_unselectable_state(lacp_port) ||
@@ -756,6 +757,8 @@
 	     lacp_port_mergeable(lacp_port)))
 		lacp_port_agg_unselect(lacp_port);
 
+	lacp_port->state = new_state;
+
 	if (!lacp_port_selected(lacp_port) &&
 	    (lacp_port_selectable_state(lacp_port) &&
 	     lacp_port_loopback_free(lacp_port)))
@@ -764,6 +767,11 @@
 	return lacp_selected_agg_update(lacp_port->lacp, NULL);
 }
 
+static int lacp_port_agg_update(struct lacp_port *lacp_port)
+{
+	return lacp_port_set_state_agg_update(lacp_port, lacp_port->state);
+}
+
 static const char slow_addr[ETH_ALEN] = { 0x01, 0x80, 0xC2, 0x00, 0x00, 0x02 };
 
 static int __slow_addr_add_del(struct lacp_port *lacp_port, bool add)
@@ -998,9 +1006,8 @@
 		       lacp_port->tdport->ifname,
 		       lacp_port_state_name[lacp_port->state],
 		       lacp_port_state_name[new_state]);
-	lacp_port->state = new_state;
 
-	err = lacp_port_agg_update(lacp_port);
+	err = lacp_port_set_state_agg_update(lacp_port, new_state);
 	if (err)
 		return err;