diff --git a/drivers/net/team/team_core.c b/drivers/net/team/team_core.c index ab1935a4aa2c..3ac82df876b0 100644 --- a/drivers/net/team/team_core.c +++ b/drivers/net/team/team_core.c @@ -1970,11 +1970,12 @@ static int team_add_slave(struct net_device *dev, struct net_device *port_dev, struct netlink_ext_ack *extack) { struct team *team = netdev_priv(dev); - int err; + int err, locked; - mutex_lock(&team->lock); + locked = mutex_trylock(&team->lock); err = team_port_add(team, port_dev, extack); - mutex_unlock(&team->lock); + if (locked) + mutex_unlock(&team->lock); if (!err) netdev_change_features(dev); @@ -1985,11 +1986,12 @@ static int team_add_slave(struct net_device *dev, struct net_device *port_dev, static int team_del_slave(struct net_device *dev, struct net_device *port_dev) { struct team *team = netdev_priv(dev); - int err; + int err, locked; - mutex_lock(&team->lock); + locked = mutex_trylock(&team->lock); err = team_port_del(team, port_dev); - mutex_unlock(&team->lock); + if (locked) + mutex_unlock(&team->lock); if (err) return err;