Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (32 commits) net: Added ASSERT_RTNL() to dev_open() and dev_close(). can: Fix can_send() handling on dev_queue_xmit() failures netns: Fix arbitrary net_device-s corruptions on net_ns stop. netfilter: Kconfig: default DCCP/SCTP conntrack support to the protocol config values netfilter: nf_conntrack_sip: restrict RTP expect flushing on error to last request macvlan: Fix memleak on device removal/crash on module removal net/ipv4: correct RFC 1122 section reference in comment tcp FRTO: SACK variant is errorneously used with NewReno e1000e: don't return half-read eeprom on error ucc_geth: Don't use RX clock as TX clock. cxgb3: Use CAP_SYS_RAWIO for firmware pcnet32: delete non NAPI code from driver. fs_enet: Fix a memory leak in fs_enet_mdio_probe [netdrvr] eexpress: IPv6 fails - multicast problems 3c59x: use netstats in net_device structure 3c980-TX needs EXTRA_PREAMBLE fix warning in drivers/net/appletalk/cops.c e1000e: Add support for BM PHYs on ICH9 uli526x: fix endianness issues in the setup frame uli526x: initialize the hardware prior to requesting interrupts ...
This commit is contained in:
@@ -208,6 +208,7 @@ static int can_create(struct net *net, struct socket *sock, int protocol)
|
||||
*/
|
||||
int can_send(struct sk_buff *skb, int loop)
|
||||
{
|
||||
struct sk_buff *newskb = NULL;
|
||||
int err;
|
||||
|
||||
if (skb->dev->type != ARPHRD_CAN) {
|
||||
@@ -244,8 +245,7 @@ int can_send(struct sk_buff *skb, int loop)
|
||||
* If the interface is not capable to do loopback
|
||||
* itself, we do it here.
|
||||
*/
|
||||
struct sk_buff *newskb = skb_clone(skb, GFP_ATOMIC);
|
||||
|
||||
newskb = skb_clone(skb, GFP_ATOMIC);
|
||||
if (!newskb) {
|
||||
kfree_skb(skb);
|
||||
return -ENOMEM;
|
||||
@@ -254,7 +254,6 @@ int can_send(struct sk_buff *skb, int loop)
|
||||
newskb->sk = skb->sk;
|
||||
newskb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
newskb->pkt_type = PACKET_BROADCAST;
|
||||
netif_rx(newskb);
|
||||
}
|
||||
} else {
|
||||
/* indication for the CAN driver: no loopback required */
|
||||
@@ -266,11 +265,20 @@ int can_send(struct sk_buff *skb, int loop)
|
||||
if (err > 0)
|
||||
err = net_xmit_errno(err);
|
||||
|
||||
if (err) {
|
||||
if (newskb)
|
||||
kfree_skb(newskb);
|
||||
return err;
|
||||
}
|
||||
|
||||
if (newskb)
|
||||
netif_rx(newskb);
|
||||
|
||||
/* update statistics */
|
||||
can_stats.tx_frames++;
|
||||
can_stats.tx_frames_delta++;
|
||||
|
||||
return err;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(can_send);
|
||||
|
||||
|
Reference in New Issue
Block a user