diff options
author | Eric Dumazet <edumazet@google.com> | 2012-06-13 01:30:07 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-06-13 19:00:26 -0400 |
commit | 0450243096de90ff51c3a6c605410c5e28d79f8d (patch) | |
tree | 8772dad022f5f6ae922a68b5b398dec561d1a1c0 /drivers/net/bonding | |
parent | 7a282bc37f8a1e7b46907d78724177d20214b137 (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.c | 2 | ||||
-rw-r--r-- | drivers/net/bonding/bond_alb.c | 6 | ||||
-rw-r--r-- | drivers/net/bonding/bond_main.c | 18 |
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) | |||
2454 | out: | 2454 | out: |
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 | |||
3990 | out: | 3990 | out: |
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) | |||
4107 | out: | 4107 | out: |
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 | ||