diff options
author | Vivien Didelot <vivien.didelot@savoirfairelinux.com> | 2017-06-01 16:07:15 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-06-01 17:34:56 -0400 |
commit | fe47d563065c91cd30088d9b118b79d44905be6f (patch) | |
tree | a45ba1a54b080a3a71e4650f03d57ac3de3767e8 /net/dsa/slave.c | |
parent | 5470979585d81271d4338c2accfd5e71dafa4af6 (diff) |
net: dsa: factor skb freeing on xmit
As of a86d8becc3f0 ("net: dsa: Factor bottom tag receive functions"),
the rcv caller frees the original SKB in case or error.
Be symmetric with that and make the xmit caller do the same.
At the same time, fix the checkpatch NULL comparison check:
CHECK: Comparison to NULL could be written "!nskb"
#208: FILE: net/dsa/tag_trailer.c:35:
+ if (nskb == NULL)
Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/dsa/slave.c')
-rw-r--r-- | net/dsa/slave.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/net/dsa/slave.c b/net/dsa/slave.c index 0442b6bf52fa..1cfdb31a2f44 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -357,10 +357,14 @@ static netdev_tx_t dsa_slave_xmit(struct sk_buff *skb, struct net_device *dev) dev->stats.tx_packets++; dev->stats.tx_bytes += skb->len; - /* Transmit function may have to reallocate the original SKB */ + /* Transmit function may have to reallocate the original SKB, + * in which case it must have freed it. Only free it here on error. + */ nskb = p->xmit(skb, dev); - if (!nskb) + if (!nskb) { + kfree_skb(skb); return NETDEV_TX_OK; + } /* SKB for netpoll still need to be mangled with the protocol-specific * tag to be successfully transmitted |