diff options
author | Nikolay Aleksandrov <nikolay@redhat.com> | 2014-09-12 00:49:22 +0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-09-14 00:29:06 +0400 |
commit | 86e749866d7c6b0ee1f9377cf7142f2690596a05 (patch) | |
tree | d81e5ce453b7c3f875f5110ddc315cf92612ccde /drivers | |
parent | b25bd2515ea32cf5ddd5fd5a2a93b8c9dd875e4f (diff) | |
download | linux-86e749866d7c6b0ee1f9377cf7142f2690596a05.tar.xz |
bonding: 3ad: clean up curr_slave_lock usage
Remove the read_lock in bond_3ad_lacpdu_recv() since when the slave is
being released its rx_handler is removed before 3ad unbind, so even if
packets arrive, they won't see the slave in an inconsistent state.
Signed-off-by: Nikolay Aleksandrov <nikolay@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/bonding/bond_3ad.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/drivers/net/bonding/bond_3ad.c b/drivers/net/bonding/bond_3ad.c index 5d27a6207384..dfd3a7835d17 100644 --- a/drivers/net/bonding/bond_3ad.c +++ b/drivers/net/bonding/bond_3ad.c @@ -2476,20 +2476,16 @@ err_free: int bond_3ad_lacpdu_recv(const struct sk_buff *skb, struct bonding *bond, struct slave *slave) { - int ret = RX_HANDLER_ANOTHER; struct lacpdu *lacpdu, _lacpdu; if (skb->protocol != PKT_TYPE_LACPDU) - return ret; + return RX_HANDLER_ANOTHER; lacpdu = skb_header_pointer(skb, 0, sizeof(_lacpdu), &_lacpdu); if (!lacpdu) - return ret; + return RX_HANDLER_ANOTHER; - read_lock(&bond->curr_slave_lock); - ret = bond_3ad_rx_indication(lacpdu, slave, skb->len); - read_unlock(&bond->curr_slave_lock); - return ret; + return bond_3ad_rx_indication(lacpdu, slave, skb->len); } /** |