summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/net/team/team.c8
-rw-r--r--include/linux/if_team.h1
2 files changed, 9 insertions, 0 deletions
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
index 694ccf6d71a3..05c5efe84591 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -508,6 +508,7 @@ static bool team_is_mode_set(struct team *team)
static void team_set_no_mode(struct team *team)
{
+ team->user_carrier_enabled = false;
team->mode = &__team_no_mode;
}
@@ -1710,6 +1711,10 @@ static netdev_features_t team_fix_features(struct net_device *dev,
static int team_change_carrier(struct net_device *dev, bool new_carrier)
{
+ struct team *team = netdev_priv(dev);
+
+ team->user_carrier_enabled = true;
+
if (new_carrier)
netif_carrier_on(dev);
else
@@ -2573,6 +2578,9 @@ static void __team_carrier_check(struct team *team)
struct team_port *port;
bool team_linkup;
+ if (team->user_carrier_enabled)
+ return;
+
team_linkup = false;
list_for_each_entry(port, &team->port_list, list) {
if (port->linkup) {
diff --git a/include/linux/if_team.h b/include/linux/if_team.h
index 0245def2aa93..4648d8021244 100644
--- a/include/linux/if_team.h
+++ b/include/linux/if_team.h
@@ -186,6 +186,7 @@ struct team {
const struct team_mode *mode;
struct team_mode_ops ops;
+ bool user_carrier_enabled;
bool queue_override_enabled;
struct list_head *qom_lists; /* array of queue override mapping lists */
long mode_priv[TEAM_MODE_PRIV_LONGS];