diff options
Diffstat (limited to 'drivers/net/can')
-rw-r--r-- | drivers/net/can/dev.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c index 120f1ab5a2ce..9d9799cf68cd 100644 --- a/drivers/net/can/dev.c +++ b/drivers/net/can/dev.c | |||
@@ -327,16 +327,24 @@ EXPORT_SYMBOL_GPL(can_put_echo_skb); | |||
327 | * is handled in the device driver. The driver must protect | 327 | * is handled in the device driver. The driver must protect |
328 | * access to priv->echo_skb, if necessary. | 328 | * access to priv->echo_skb, if necessary. |
329 | */ | 329 | */ |
330 | void can_get_echo_skb(struct net_device *dev, unsigned int idx) | 330 | unsigned int can_get_echo_skb(struct net_device *dev, unsigned int idx) |
331 | { | 331 | { |
332 | struct can_priv *priv = netdev_priv(dev); | 332 | struct can_priv *priv = netdev_priv(dev); |
333 | 333 | ||
334 | BUG_ON(idx >= priv->echo_skb_max); | 334 | BUG_ON(idx >= priv->echo_skb_max); |
335 | 335 | ||
336 | if (priv->echo_skb[idx]) { | 336 | if (priv->echo_skb[idx]) { |
337 | struct sk_buff *skb = priv->echo_skb[idx]; | ||
338 | struct can_frame *cf = (struct can_frame *)skb->data; | ||
339 | u8 dlc = cf->can_dlc; | ||
340 | |||
337 | netif_rx(priv->echo_skb[idx]); | 341 | netif_rx(priv->echo_skb[idx]); |
338 | priv->echo_skb[idx] = NULL; | 342 | priv->echo_skb[idx] = NULL; |
343 | |||
344 | return dlc; | ||
339 | } | 345 | } |
346 | |||
347 | return 0; | ||
340 | } | 348 | } |
341 | EXPORT_SYMBOL_GPL(can_get_echo_skb); | 349 | EXPORT_SYMBOL_GPL(can_get_echo_skb); |
342 | 350 | ||