diff options
-rw-r--r-- | drivers/net/team/team.c | 16 | ||||
-rw-r--r-- | include/linux/if_team.h | 1 |
2 files changed, 14 insertions, 3 deletions
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c index 6cea83b48cad..8156b33ee3e7 100644 --- a/drivers/net/team/team.c +++ b/drivers/net/team/team.c | |||
@@ -1615,7 +1615,6 @@ static int team_init(struct net_device *dev) | |||
1615 | int err; | 1615 | int err; |
1616 | 1616 | ||
1617 | team->dev = dev; | 1617 | team->dev = dev; |
1618 | mutex_init(&team->lock); | ||
1619 | team_set_no_mode(team); | 1618 | team_set_no_mode(team); |
1620 | 1619 | ||
1621 | team->pcpu_stats = netdev_alloc_pcpu_stats(struct team_pcpu_stats); | 1620 | team->pcpu_stats = netdev_alloc_pcpu_stats(struct team_pcpu_stats); |
@@ -1642,6 +1641,9 @@ static int team_init(struct net_device *dev) | |||
1642 | goto err_options_register; | 1641 | goto err_options_register; |
1643 | netif_carrier_off(dev); | 1642 | netif_carrier_off(dev); |
1644 | 1643 | ||
1644 | lockdep_register_key(&team->team_lock_key); | ||
1645 | __mutex_init(&team->lock, "team->team_lock_key", &team->team_lock_key); | ||
1646 | |||
1645 | return 0; | 1647 | return 0; |
1646 | 1648 | ||
1647 | err_options_register: | 1649 | err_options_register: |
@@ -1671,6 +1673,7 @@ static void team_uninit(struct net_device *dev) | |||
1671 | team_queue_override_fini(team); | 1673 | team_queue_override_fini(team); |
1672 | mutex_unlock(&team->lock); | 1674 | mutex_unlock(&team->lock); |
1673 | netdev_change_features(dev); | 1675 | netdev_change_features(dev); |
1676 | lockdep_unregister_key(&team->team_lock_key); | ||
1674 | } | 1677 | } |
1675 | 1678 | ||
1676 | static void team_destructor(struct net_device *dev) | 1679 | static void team_destructor(struct net_device *dev) |
@@ -1974,8 +1977,15 @@ static int team_del_slave(struct net_device *dev, struct net_device *port_dev) | |||
1974 | err = team_port_del(team, port_dev); | 1977 | err = team_port_del(team, port_dev); |
1975 | mutex_unlock(&team->lock); | 1978 | mutex_unlock(&team->lock); |
1976 | 1979 | ||
1977 | if (!err) | 1980 | if (err) |
1978 | netdev_change_features(dev); | 1981 | return err; |
1982 | |||
1983 | if (netif_is_team_master(port_dev)) { | ||
1984 | lockdep_unregister_key(&team->team_lock_key); | ||
1985 | lockdep_register_key(&team->team_lock_key); | ||
1986 | lockdep_set_class(&team->lock, &team->team_lock_key); | ||
1987 | } | ||
1988 | netdev_change_features(dev); | ||
1979 | 1989 | ||
1980 | return err; | 1990 | return err; |
1981 | } | 1991 | } |
diff --git a/include/linux/if_team.h b/include/linux/if_team.h index 06faa066496f..ec7e4bd07f82 100644 --- a/include/linux/if_team.h +++ b/include/linux/if_team.h | |||
@@ -223,6 +223,7 @@ struct team { | |||
223 | atomic_t count_pending; | 223 | atomic_t count_pending; |
224 | struct delayed_work dw; | 224 | struct delayed_work dw; |
225 | } mcast_rejoin; | 225 | } mcast_rejoin; |
226 | struct lock_class_key team_lock_key; | ||
226 | long mode_priv[TEAM_MODE_PRIV_LONGS]; | 227 | long mode_priv[TEAM_MODE_PRIV_LONGS]; |
227 | }; | 228 | }; |
228 | 229 | ||