On Mon, 25 Jan 2010 12:01:12 +0100
Kristoffer Glembo [off-list ref] wrote:
+static int greth_start_xmit(struct sk_buff *skb, struct net_device *dev)
+{
+ struct greth_private *greth = netdev_priv(dev);
+ struct greth_bd *bdp;
+ int err = NETDEV_TX_OK;
+ u32 status, dma_addr;
+
+ bdp = greth->tx_bd_base + greth->tx_next;
+
+ if (unlikely(greth->tx_free <= 0)) {
+ netif_stop_queue(dev);
+ err = NETDEV_TX_BUSY;
+ goto out;
+ }
...
+
+out:
+ dev_kfree_skb(skb);
+ return err;
+}
+
Wrong, if device is busy; then skb must NOT be freed.
--