rose: Transmit packets in rose_xmit not rose_rebuild_header
authorEric W. Biederman <ebiederm@xmission.com>
Mon, 2 Mar 2015 06:02:19 +0000 (00:02 -0600)
committerDavid S. Miller <davem@davemloft.net>
Mon, 2 Mar 2015 21:43:39 +0000 (16:43 -0500)
Patterned after the similar code in net/rom this turns out
to be a trivial obviously correct transmformation.

Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: linux-hams@vger.kernel.org
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/rose/rose_dev.c

index 24d2b40b6c6b45e1edeacddbecefa585f693cc81..90209c1fa49baff0f08672fcc1ba9255e436397c 100644 (file)
@@ -59,38 +59,14 @@ static int rose_header(struct sk_buff *skb, struct net_device *dev,
 static int rose_rebuild_header(struct sk_buff *skb)
 {
 #ifdef CONFIG_INET
-       struct net_device *dev = skb->dev;
-       struct net_device_stats *stats = &dev->stats;
        unsigned char *bp = (unsigned char *)skb->data;
-       struct sk_buff *skbn;
-       unsigned int len;
 
        if (arp_find(bp + 7, skb)) {
                return 1;
        }
 
-       if ((skbn = skb_clone(skb, GFP_ATOMIC)) == NULL) {
-               kfree_skb(skb);
-               return 1;
-       }
-
-       if (skb->sk != NULL)
-               skb_set_owner_w(skbn, skb->sk);
-
-       kfree_skb(skb);
-
-       len = skbn->len;
-
-       if (!rose_route_frame(skbn, NULL)) {
-               kfree_skb(skbn);
-               stats->tx_errors++;
-               return 1;
-       }
-
-       stats->tx_packets++;
-       stats->tx_bytes += len;
 #endif
-       return 1;
+       return 0;
 }
 
 static int rose_set_mac_address(struct net_device *dev, void *addr)
@@ -137,13 +113,21 @@ static int rose_close(struct net_device *dev)
 static netdev_tx_t rose_xmit(struct sk_buff *skb, struct net_device *dev)
 {
        struct net_device_stats *stats = &dev->stats;
+       unsigned int len = skb->len;
 
        if (!netif_running(dev)) {
                printk(KERN_ERR "ROSE: rose_xmit - called when iface is down\n");
                return NETDEV_TX_BUSY;
        }
-       dev_kfree_skb(skb);
-       stats->tx_errors++;
+
+       if (!rose_route_frame(skb, NULL)) {
+               dev_kfree_skb(skb);
+               stats->tx_errors++;
+               return NETDEV_TX_OK;
+       }
+
+       stats->tx_packets++;
+       stats->tx_bytes += len;
        return NETDEV_TX_OK;
 }