| From foo@baz Tue Jan 26 21:37:04 PST 2016 |
| From: Ido Schimmel <idosch@mellanox.com> |
| Date: Mon, 18 Jan 2016 17:30:22 +0200 |
| Subject: team: Replace rcu_read_lock with a mutex in team_vlan_rx_kill_vid |
| |
| From: Ido Schimmel <idosch@mellanox.com> |
| |
| [ Upstream commit 60a6531bfe49555581ccd65f66a350cc5693fcde ] |
| |
| We can't be within an RCU read-side critical section when deleting |
| VLANs, as underlying drivers might sleep during the hardware operation. |
| Therefore, replace the RCU critical section with a mutex. This is |
| consistent with team_vlan_rx_add_vid. |
| |
| Fixes: 3d249d4ca7d0 ("net: introduce ethernet teaming device") |
| Acked-by: Jiri Pirko <jiri@mellanox.com> |
| Signed-off-by: Ido Schimmel <idosch@mellanox.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/team/team.c | 6 +++--- |
| 1 file changed, 3 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/net/team/team.c |
| +++ b/drivers/net/team/team.c |
| @@ -1845,10 +1845,10 @@ static int team_vlan_rx_kill_vid(struct |
| struct team *team = netdev_priv(dev); |
| struct team_port *port; |
| |
| - rcu_read_lock(); |
| - list_for_each_entry_rcu(port, &team->port_list, list) |
| + mutex_lock(&team->lock); |
| + list_for_each_entry(port, &team->port_list, list) |
| vlan_vid_del(port->dev, proto, vid); |
| - rcu_read_unlock(); |
| + mutex_unlock(&team->lock); |
| |
| return 0; |
| } |