diff options
Diffstat (limited to 'drivers/net/can/dev.c')
| -rw-r--r-- | drivers/net/can/dev.c | 15 |
1 files changed, 3 insertions, 12 deletions
diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c index 13a909822e25..fc59bc6f040b 100644 --- a/drivers/net/can/dev.c +++ b/drivers/net/can/dev.c | |||
| @@ -323,19 +323,10 @@ void can_put_echo_skb(struct sk_buff *skb, struct net_device *dev, | |||
| 323 | } | 323 | } |
| 324 | 324 | ||
| 325 | if (!priv->echo_skb[idx]) { | 325 | if (!priv->echo_skb[idx]) { |
| 326 | struct sock *srcsk = skb->sk; | ||
| 327 | 326 | ||
| 328 | if (atomic_read(&skb->users) != 1) { | 327 | skb = can_create_echo_skb(skb); |
| 329 | struct sk_buff *old_skb = skb; | 328 | if (!skb) |
| 330 | 329 | return; | |
| 331 | skb = skb_clone(old_skb, GFP_ATOMIC); | ||
| 332 | kfree_skb(old_skb); | ||
| 333 | if (!skb) | ||
| 334 | return; | ||
| 335 | } else | ||
| 336 | skb_orphan(skb); | ||
| 337 | |||
| 338 | skb->sk = srcsk; | ||
| 339 | 330 | ||
| 340 | /* make settings for echo to reduce code in irq context */ | 331 | /* make settings for echo to reduce code in irq context */ |
| 341 | skb->protocol = htons(ETH_P_CAN); | 332 | skb->protocol = htons(ETH_P_CAN); |
