]> rtime.felk.cvut.cz Git - socketcan-devel.git/blobdiff - kernel/2.6/drivers/net/can/dev.c
dev: add can_get_echo_skb() for cleanup purposes
[socketcan-devel.git] / kernel / 2.6 / drivers / net / can / dev.c
index 290c75581f05db9a7c0a54d87eaf194666c4ba31..0280a730577a67c21b494c9891785f462b3f1927 100644 (file)
@@ -423,13 +423,29 @@ void can_get_echo_skb(struct net_device *dev, int idx)
 {
        struct can_priv *priv = netdev_priv(dev);
 
-       if ((dev->flags & IFF_ECHO) && priv->echo_skb[idx]) {
+       if (priv->echo_skb[idx]) {
                netif_rx(priv->echo_skb[idx]);
                priv->echo_skb[idx] = NULL;
        }
 }
 EXPORT_SYMBOL_GPL(can_get_echo_skb);
 
+/*
+  * Remove the skb from the stack and free it.
+  *
+  * The function is typically called when TX failed.
+  */
+void can_free_echo_skb(struct net_device *dev, int idx)
+{
+       struct can_priv *priv = netdev_priv(dev);
+
+       if (priv->echo_skb[idx]) {
+               kfree_skb(priv->echo_skb[idx]);
+               priv->echo_skb[idx] = NULL;
+       }
+}
+EXPORT_SYMBOL_GPL(can_free_echo_skb);
+
 /*
  * CAN device restart for bus-off recovery
  */