diff options
author | Bjørn Mork <bjorn@mork.no> | 2013-01-31 03:36:05 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-02-04 13:07:31 -0500 |
commit | bf414b369f158bb527f9f29174ada815f961b44c (patch) | |
tree | 96349391731e44d9ba6fb2b6d4bea70d03277230 | |
parent | 5f1e942cb45d06968b0ce94472d97014e0e1fdc9 (diff) |
net: usbnet: fix tx_dropped statistics
It is normal for minidrivers accumulating frames to return NULL
from their tx_fixup function. We do not want to count this as a
drop, or log any debug messages. A different exit path is
therefore chosen for such drivers, skipping the debug message
and the tx_dropped increment.
The test for accumulating drivers was however completely bogus,
making the exit path selection depend on whether the user had
enabled tx_err logging or not. This would arbitrarily mess up
accounting for both accumulating and non-accumulating minidrivers,
and would result in unwanted debug messages for the accumulating
drivers.
Fix by testing for FLAG_MULTI_PACKET instead, which probably was
the intention from the beginning. This usage match the documented
behaviour of this flag:
Indicates to usbnet, that USB driver accumulates multiple IP packets.
Affects statistic (counters) and short packet handling.
Signed-off-by: Bjørn Mork <bjorn@mork.no>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/usb/usbnet.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index 977837725726..5e33606c1366 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c | |||
@@ -1125,13 +1125,11 @@ netdev_tx_t usbnet_start_xmit (struct sk_buff *skb, | |||
1125 | if (info->tx_fixup) { | 1125 | if (info->tx_fixup) { |
1126 | skb = info->tx_fixup (dev, skb, GFP_ATOMIC); | 1126 | skb = info->tx_fixup (dev, skb, GFP_ATOMIC); |
1127 | if (!skb) { | 1127 | if (!skb) { |
1128 | if (netif_msg_tx_err(dev)) { | 1128 | /* packet collected; minidriver waiting for more */ |
1129 | netif_dbg(dev, tx_err, dev->net, "can't tx_fixup skb\n"); | 1129 | if (info->flags & FLAG_MULTI_PACKET) |
1130 | goto drop; | ||
1131 | } else { | ||
1132 | /* cdc_ncm collected packet; waits for more */ | ||
1133 | goto not_drop; | 1130 | goto not_drop; |
1134 | } | 1131 | netif_dbg(dev, tx_err, dev->net, "can't tx_fixup skb\n"); |
1132 | goto drop; | ||
1135 | } | 1133 | } |
1136 | } | 1134 | } |
1137 | length = skb->len; | 1135 | length = skb->len; |