bonding: 3ad: clean up curr_slave_lock usage
authorNikolay Aleksandrov <nikolay@redhat.com>
Thu, 11 Sep 2014 20:49:22 +0000 (22:49 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sat, 13 Sep 2014 20:29:06 +0000 (16:29 -0400)
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>
drivers/net/bonding/bond_3ad.c

index 5d27a6207384cc233ec9ea6051e75a33362da2ef..dfd3a7835d17bf5634f1578c380e7b27046dceb1 100644 (file)
@@ -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);
 }
 
 /**