diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2015-03-02 01:02:19 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-03-02 16:43:39 -0500 |
commit | 03ec2ac0977dd1d44f8637f33c63a9a7022cf9af (patch) | |
tree | eb35c63ae08e69fc2c95f6543c5911db236ace48 /net | |
parent | b753af31abe416b19830d5ac7f8da6c16f165214 (diff) |
rose: Transmit packets in rose_xmit not rose_rebuild_header
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>
Diffstat (limited to 'net')
-rw-r--r-- | net/rose/rose_dev.c | 38 |
1 files changed, 11 insertions, 27 deletions
diff --git a/net/rose/rose_dev.c b/net/rose/rose_dev.c index 24d2b40b6c6b..90209c1fa49b 100644 --- a/net/rose/rose_dev.c +++ b/net/rose/rose_dev.c | |||
@@ -59,38 +59,14 @@ static int rose_header(struct sk_buff *skb, struct net_device *dev, | |||
59 | static int rose_rebuild_header(struct sk_buff *skb) | 59 | static int rose_rebuild_header(struct sk_buff *skb) |
60 | { | 60 | { |
61 | #ifdef CONFIG_INET | 61 | #ifdef CONFIG_INET |
62 | struct net_device *dev = skb->dev; | ||
63 | struct net_device_stats *stats = &dev->stats; | ||
64 | unsigned char *bp = (unsigned char *)skb->data; | 62 | unsigned char *bp = (unsigned char *)skb->data; |
65 | struct sk_buff *skbn; | ||
66 | unsigned int len; | ||
67 | 63 | ||
68 | if (arp_find(bp + 7, skb)) { | 64 | if (arp_find(bp + 7, skb)) { |
69 | return 1; | 65 | return 1; |
70 | } | 66 | } |
71 | 67 | ||
72 | if ((skbn = skb_clone(skb, GFP_ATOMIC)) == NULL) { | ||
73 | kfree_skb(skb); | ||
74 | return 1; | ||
75 | } | ||
76 | |||
77 | if (skb->sk != NULL) | ||
78 | skb_set_owner_w(skbn, skb->sk); | ||
79 | |||
80 | kfree_skb(skb); | ||
81 | |||
82 | len = skbn->len; | ||
83 | |||
84 | if (!rose_route_frame(skbn, NULL)) { | ||
85 | kfree_skb(skbn); | ||
86 | stats->tx_errors++; | ||
87 | return 1; | ||
88 | } | ||
89 | |||
90 | stats->tx_packets++; | ||
91 | stats->tx_bytes += len; | ||
92 | #endif | 68 | #endif |
93 | return 1; | 69 | return 0; |
94 | } | 70 | } |
95 | 71 | ||
96 | static int rose_set_mac_address(struct net_device *dev, void *addr) | 72 | static int rose_set_mac_address(struct net_device *dev, void *addr) |
@@ -137,13 +113,21 @@ static int rose_close(struct net_device *dev) | |||
137 | static netdev_tx_t rose_xmit(struct sk_buff *skb, struct net_device *dev) | 113 | static netdev_tx_t rose_xmit(struct sk_buff *skb, struct net_device *dev) |
138 | { | 114 | { |
139 | struct net_device_stats *stats = &dev->stats; | 115 | struct net_device_stats *stats = &dev->stats; |
116 | unsigned int len = skb->len; | ||
140 | 117 | ||
141 | if (!netif_running(dev)) { | 118 | if (!netif_running(dev)) { |
142 | printk(KERN_ERR "ROSE: rose_xmit - called when iface is down\n"); | 119 | printk(KERN_ERR "ROSE: rose_xmit - called when iface is down\n"); |
143 | return NETDEV_TX_BUSY; | 120 | return NETDEV_TX_BUSY; |
144 | } | 121 | } |
145 | dev_kfree_skb(skb); | 122 | |
146 | stats->tx_errors++; | 123 | if (!rose_route_frame(skb, NULL)) { |
124 | dev_kfree_skb(skb); | ||
125 | stats->tx_errors++; | ||
126 | return NETDEV_TX_OK; | ||
127 | } | ||
128 | |||
129 | stats->tx_packets++; | ||
130 | stats->tx_bytes += len; | ||
147 | return NETDEV_TX_OK; | 131 | return NETDEV_TX_OK; |
148 | } | 132 | } |
149 | 133 | ||