net: dsa: trailer: don't allocate additional memory for padding/tagging
authorChristian Eggers <ceggers@arri.de>
Sun, 1 Nov 2020 19:16:11 +0000 (21:16 +0200)
committerJakub Kicinski <kuba@kernel.org>
Tue, 3 Nov 2020 01:41:16 +0000 (17:41 -0800)
The caller (dsa_slave_xmit) guarantees that the frame length is at least
ETH_ZLEN and that enough memory for tail tagging is available.

Signed-off-by: Christian Eggers <ceggers@arri.de>
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/dsa/tag_trailer.c

index 3a1cc24..5b97ede 100644 (file)
 static struct sk_buff *trailer_xmit(struct sk_buff *skb, struct net_device *dev)
 {
        struct dsa_port *dp = dsa_slave_to_port(dev);
-       struct sk_buff *nskb;
-       int padlen;
        u8 *trailer;
 
-       /*
-        * We have to make sure that the trailer ends up as the very
-        * last 4 bytes of the packet.  This means that we have to pad
-        * the packet to the minimum ethernet frame size, if necessary,
-        * before adding the trailer.
-        */
-       padlen = 0;
-       if (skb->len < 60)
-               padlen = 60 - skb->len;
-
-       nskb = alloc_skb(NET_IP_ALIGN + skb->len + padlen + 4, GFP_ATOMIC);
-       if (!nskb)
-               return NULL;
-       skb_reserve(nskb, NET_IP_ALIGN);
-
-       skb_reset_mac_header(nskb);
-       skb_set_network_header(nskb, skb_network_header(skb) - skb->head);
-       skb_set_transport_header(nskb, skb_transport_header(skb) - skb->head);
-       skb_copy_and_csum_dev(skb, skb_put(nskb, skb->len));
-       consume_skb(skb);
-
-       if (padlen) {
-               skb_put_zero(nskb, padlen);
-       }
-
-       trailer = skb_put(nskb, 4);
+       trailer = skb_put(skb, 4);
        trailer[0] = 0x80;
        trailer[1] = 1 << dp->index;
        trailer[2] = 0x10;
        trailer[3] = 0x00;
 
-       return nskb;
+       return skb;
 }
 
 static struct sk_buff *trailer_rcv(struct sk_buff *skb, struct net_device *dev,