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>
This commit is contained in:
Родитель
b25bd2515e
Коммит
86e749866d
|
@ -2476,20 +2476,16 @@ err_free:
|
||||||
int bond_3ad_lacpdu_recv(const struct sk_buff *skb, struct bonding *bond,
|
int bond_3ad_lacpdu_recv(const struct sk_buff *skb, struct bonding *bond,
|
||||||
struct slave *slave)
|
struct slave *slave)
|
||||||
{
|
{
|
||||||
int ret = RX_HANDLER_ANOTHER;
|
|
||||||
struct lacpdu *lacpdu, _lacpdu;
|
struct lacpdu *lacpdu, _lacpdu;
|
||||||
|
|
||||||
if (skb->protocol != PKT_TYPE_LACPDU)
|
if (skb->protocol != PKT_TYPE_LACPDU)
|
||||||
return ret;
|
return RX_HANDLER_ANOTHER;
|
||||||
|
|
||||||
lacpdu = skb_header_pointer(skb, 0, sizeof(_lacpdu), &_lacpdu);
|
lacpdu = skb_header_pointer(skb, 0, sizeof(_lacpdu), &_lacpdu);
|
||||||
if (!lacpdu)
|
if (!lacpdu)
|
||||||
return ret;
|
return RX_HANDLER_ANOTHER;
|
||||||
|
|
||||||
read_lock(&bond->curr_slave_lock);
|
return bond_3ad_rx_indication(lacpdu, slave, skb->len);
|
||||||
ret = bond_3ad_rx_indication(lacpdu, slave, skb->len);
|
|
||||||
read_unlock(&bond->curr_slave_lock);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Загрузка…
Ссылка в новой задаче