aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/bonding
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2012-06-13 01:30:07 -0400
committerDavid S. Miller <davem@davemloft.net>2012-06-13 19:00:26 -0400
commit0450243096de90ff51c3a6c605410c5e28d79f8d (patch)
tree8772dad022f5f6ae922a68b5b398dec561d1a1c0 /drivers/net/bonding
parent7a282bc37f8a1e7b46907d78724177d20214b137 (diff)
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>
Diffstat (limited to 'drivers/net/bonding')
-rw-r--r--drivers/net/bonding/bond_3ad.c2
-rw-r--r--drivers/net/bonding/bond_alb.c6
-rw-r--r--drivers/net/bonding/bond_main.c18
3 files changed, 13 insertions, 13 deletions
diff --git a/drivers/net/bonding/bond_3ad.c b/drivers/net/bonding/bond_3ad.c
index 3031e0413114..a030e635f001 100644
--- a/drivers/net/bonding/bond_3ad.c
+++ b/drivers/net/bonding/bond_3ad.c
@@ -2454,7 +2454,7 @@ int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev)
2454out: 2454out:
2455 if (res) { 2455 if (res) {
2456 /* no suitable interface, frame not sent */ 2456 /* no suitable interface, frame not sent */
2457 dev_kfree_skb(skb); 2457 kfree_skb(skb);
2458 } 2458 }
2459 2459
2460 return NETDEV_TX_OK; 2460 return NETDEV_TX_OK;
diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c
index ef3791a09ad8..e15cc11edbbe 100644
--- a/drivers/net/bonding/bond_alb.c
+++ b/drivers/net/bonding/bond_alb.c
@@ -1346,12 +1346,12 @@ int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
1346 } 1346 }
1347 } 1347 }
1348 1348
1349 read_unlock(&bond->curr_slave_lock);
1350
1349 if (res) { 1351 if (res) {
1350 /* no suitable interface, frame not sent */ 1352 /* no suitable interface, frame not sent */
1351 dev_kfree_skb(skb); 1353 kfree_skb(skb);
1352 } 1354 }
1353 read_unlock(&bond->curr_slave_lock);
1354
1355 return NETDEV_TX_OK; 1355 return NETDEV_TX_OK;
1356} 1356}
1357 1357
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index af506321500b..f5a40b925f5e 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -3990,7 +3990,7 @@ static int bond_xmit_roundrobin(struct sk_buff *skb, struct net_device *bond_dev
3990out: 3990out:
3991 if (res) { 3991 if (res) {
3992 /* no suitable interface, frame not sent */ 3992 /* no suitable interface, frame not sent */
3993 dev_kfree_skb(skb); 3993 kfree_skb(skb);
3994 } 3994 }
3995 3995
3996 return NETDEV_TX_OK; 3996 return NETDEV_TX_OK;
@@ -4012,11 +4012,11 @@ static int bond_xmit_activebackup(struct sk_buff *skb, struct net_device *bond_d
4012 res = bond_dev_queue_xmit(bond, skb, 4012 res = bond_dev_queue_xmit(bond, skb,
4013 bond->curr_active_slave->dev); 4013 bond->curr_active_slave->dev);
4014 4014
4015 read_unlock(&bond->curr_slave_lock);
4016
4015 if (res) 4017 if (res)
4016 /* no suitable interface, frame not sent */ 4018 /* no suitable interface, frame not sent */
4017 dev_kfree_skb(skb); 4019 kfree_skb(skb);
4018
4019 read_unlock(&bond->curr_slave_lock);
4020 4020
4021 return NETDEV_TX_OK; 4021 return NETDEV_TX_OK;
4022} 4022}
@@ -4055,7 +4055,7 @@ static int bond_xmit_xor(struct sk_buff *skb, struct net_device *bond_dev)
4055 4055
4056 if (res) { 4056 if (res) {
4057 /* no suitable interface, frame not sent */ 4057 /* no suitable interface, frame not sent */
4058 dev_kfree_skb(skb); 4058 kfree_skb(skb);
4059 } 4059 }
4060 4060
4061 return NETDEV_TX_OK; 4061 return NETDEV_TX_OK;
@@ -4093,7 +4093,7 @@ static int bond_xmit_broadcast(struct sk_buff *skb, struct net_device *bond_dev)
4093 4093
4094 res = bond_dev_queue_xmit(bond, skb2, tx_dev); 4094 res = bond_dev_queue_xmit(bond, skb2, tx_dev);
4095 if (res) { 4095 if (res) {
4096 dev_kfree_skb(skb2); 4096 kfree_skb(skb2);
4097 continue; 4097 continue;
4098 } 4098 }
4099 } 4099 }
@@ -4107,7 +4107,7 @@ static int bond_xmit_broadcast(struct sk_buff *skb, struct net_device *bond_dev)
4107out: 4107out:
4108 if (res) 4108 if (res)
4109 /* no suitable interface, frame not sent */ 4109 /* no suitable interface, frame not sent */
4110 dev_kfree_skb(skb); 4110 kfree_skb(skb);
4111 4111
4112 /* frame sent to all suitable interfaces */ 4112 /* frame sent to all suitable interfaces */
4113 return NETDEV_TX_OK; 4113 return NETDEV_TX_OK;
@@ -4213,7 +4213,7 @@ static netdev_tx_t __bond_start_xmit(struct sk_buff *skb, struct net_device *dev
4213 pr_err("%s: Error: Unknown bonding mode %d\n", 4213 pr_err("%s: Error: Unknown bonding mode %d\n",
4214 dev->name, bond->params.mode); 4214 dev->name, bond->params.mode);
4215 WARN_ON_ONCE(1); 4215 WARN_ON_ONCE(1);
4216 dev_kfree_skb(skb); 4216 kfree_skb(skb);
4217 return NETDEV_TX_OK; 4217 return NETDEV_TX_OK;
4218 } 4218 }
4219} 4219}
@@ -4235,7 +4235,7 @@ static netdev_tx_t bond_start_xmit(struct sk_buff *skb, struct net_device *dev)
4235 if (bond->slave_cnt) 4235 if (bond->slave_cnt)
4236 ret = __bond_start_xmit(skb, dev); 4236 ret = __bond_start_xmit(skb, dev);
4237 else 4237 else
4238 dev_kfree_skb(skb); 4238 kfree_skb(skb);
4239 4239
4240 read_unlock(&bond->lock); 4240 read_unlock(&bond->lock);
4241 4241