bonding: drop_monitor aware
When packets are dropped in TX path, its better to use kfree_skb() instead of dev_kfree_skb() to give proper drop_monitor events. Also move the kfree_skb() call after read_unlock() in bond_alb_xmit() and bond_xmit_activebackup() Signed-off-by: Eric Dumazet <edumazet@google.com> Cc: Jay Vosburgh <fubar@us.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
7a282bc37f
commit
0450243096
@@ -2454,7 +2454,7 @@ int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev)
|
|||||||
out:
|
out:
|
||||||
if (res) {
|
if (res) {
|
||||||
/* no suitable interface, frame not sent */
|
/* no suitable interface, frame not sent */
|
||||||
dev_kfree_skb(skb);
|
kfree_skb(skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NETDEV_TX_OK;
|
return NETDEV_TX_OK;
|
||||||
|
@@ -1346,12 +1346,12 @@ int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (res) {
|
|
||||||
/* no suitable interface, frame not sent */
|
|
||||||
dev_kfree_skb(skb);
|
|
||||||
}
|
|
||||||
read_unlock(&bond->curr_slave_lock);
|
read_unlock(&bond->curr_slave_lock);
|
||||||
|
|
||||||
|
if (res) {
|
||||||
|
/* no suitable interface, frame not sent */
|
||||||
|
kfree_skb(skb);
|
||||||
|
}
|
||||||
return NETDEV_TX_OK;
|
return NETDEV_TX_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -3990,7 +3990,7 @@ static int bond_xmit_roundrobin(struct sk_buff *skb, struct net_device *bond_dev
|
|||||||
out:
|
out:
|
||||||
if (res) {
|
if (res) {
|
||||||
/* no suitable interface, frame not sent */
|
/* no suitable interface, frame not sent */
|
||||||
dev_kfree_skb(skb);
|
kfree_skb(skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NETDEV_TX_OK;
|
return NETDEV_TX_OK;
|
||||||
@@ -4012,11 +4012,11 @@ static int bond_xmit_activebackup(struct sk_buff *skb, struct net_device *bond_d
|
|||||||
res = bond_dev_queue_xmit(bond, skb,
|
res = bond_dev_queue_xmit(bond, skb,
|
||||||
bond->curr_active_slave->dev);
|
bond->curr_active_slave->dev);
|
||||||
|
|
||||||
|
read_unlock(&bond->curr_slave_lock);
|
||||||
|
|
||||||
if (res)
|
if (res)
|
||||||
/* no suitable interface, frame not sent */
|
/* no suitable interface, frame not sent */
|
||||||
dev_kfree_skb(skb);
|
kfree_skb(skb);
|
||||||
|
|
||||||
read_unlock(&bond->curr_slave_lock);
|
|
||||||
|
|
||||||
return NETDEV_TX_OK;
|
return NETDEV_TX_OK;
|
||||||
}
|
}
|
||||||
@@ -4055,7 +4055,7 @@ static int bond_xmit_xor(struct sk_buff *skb, struct net_device *bond_dev)
|
|||||||
|
|
||||||
if (res) {
|
if (res) {
|
||||||
/* no suitable interface, frame not sent */
|
/* no suitable interface, frame not sent */
|
||||||
dev_kfree_skb(skb);
|
kfree_skb(skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NETDEV_TX_OK;
|
return NETDEV_TX_OK;
|
||||||
@@ -4093,7 +4093,7 @@ static int bond_xmit_broadcast(struct sk_buff *skb, struct net_device *bond_dev)
|
|||||||
|
|
||||||
res = bond_dev_queue_xmit(bond, skb2, tx_dev);
|
res = bond_dev_queue_xmit(bond, skb2, tx_dev);
|
||||||
if (res) {
|
if (res) {
|
||||||
dev_kfree_skb(skb2);
|
kfree_skb(skb2);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4107,7 +4107,7 @@ static int bond_xmit_broadcast(struct sk_buff *skb, struct net_device *bond_dev)
|
|||||||
out:
|
out:
|
||||||
if (res)
|
if (res)
|
||||||
/* no suitable interface, frame not sent */
|
/* no suitable interface, frame not sent */
|
||||||
dev_kfree_skb(skb);
|
kfree_skb(skb);
|
||||||
|
|
||||||
/* frame sent to all suitable interfaces */
|
/* frame sent to all suitable interfaces */
|
||||||
return NETDEV_TX_OK;
|
return NETDEV_TX_OK;
|
||||||
@@ -4213,7 +4213,7 @@ static netdev_tx_t __bond_start_xmit(struct sk_buff *skb, struct net_device *dev
|
|||||||
pr_err("%s: Error: Unknown bonding mode %d\n",
|
pr_err("%s: Error: Unknown bonding mode %d\n",
|
||||||
dev->name, bond->params.mode);
|
dev->name, bond->params.mode);
|
||||||
WARN_ON_ONCE(1);
|
WARN_ON_ONCE(1);
|
||||||
dev_kfree_skb(skb);
|
kfree_skb(skb);
|
||||||
return NETDEV_TX_OK;
|
return NETDEV_TX_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4235,7 +4235,7 @@ static netdev_tx_t bond_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||||||
if (bond->slave_cnt)
|
if (bond->slave_cnt)
|
||||||
ret = __bond_start_xmit(skb, dev);
|
ret = __bond_start_xmit(skb, dev);
|
||||||
else
|
else
|
||||||
dev_kfree_skb(skb);
|
kfree_skb(skb);
|
||||||
|
|
||||||
read_unlock(&bond->lock);
|
read_unlock(&bond->lock);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user