staging: et131x: In et131x_tx(), don't return NETDEV_TX_BUSY, just drop the packet
authorMark Einon <mark.einon@gmail.com>
Thu, 11 Sep 2014 21:59:40 +0000 (22:59 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 19 Sep 2014 23:02:12 +0000 (16:02 -0700)
Memory allocation errors do not denote NETDEV_TX_BUSY, simply drop
the packet silently with kfree_skb() and return NETDEV_TX_OK.

Also remove this item from the TODO list.

Signed-off-by: Mark Einon <mark.einon@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/et131x/README
drivers/staging/et131x/et131x.c

index 05555a3..47543cc 100644 (file)
@@ -10,7 +10,6 @@ driver as they did not build properly at the time.
 TODO:
        - Look at reducing the number of spinlocks
        - Simplify code in nic_rx_pkts(), when determining multicast_pkts_rcvd
-       - In et131x_tx(), don't return NETDEV_TX_BUSY, just drop the packet with kfree_skb().
        - Reduce the number of split lines by careful consideration of variable names etc.
 
 Please send patches to:
index 0314920..c1ba51a 100644 (file)
@@ -4212,7 +4212,6 @@ static void et131x_multicast(struct net_device *netdev)
 /* et131x_tx - The handler to tx a packet on the device */
 static netdev_tx_t et131x_tx(struct sk_buff *skb, struct net_device *netdev)
 {
-       int status = 0;
        struct et131x_adapter *adapter = netdev_priv(netdev);
        struct tx_ring *tx_ring = &adapter->tx_ring;
 
@@ -4224,43 +4223,23 @@ static netdev_tx_t et131x_tx(struct sk_buff *skb, struct net_device *netdev)
        netdev->trans_start = jiffies;
 
        /* TCB is not available */
-       if (tx_ring->used >= NUM_TCB) {
-               /* NOTE: If there's an error on send, no need to queue the
-                * packet under Linux; if we just send an error up to the
-                * netif layer, it will resend the skb to us.
-                */
-               status = -ENOMEM;
-       } else {
-               /* We need to see if the link is up; if it's not, make the
-                * netif layer think we're good and drop the packet
-                */
-               if ((adapter->flags & FMP_ADAPTER_FAIL_SEND_MASK) ||
-                   !netif_carrier_ok(netdev)) {
-                       dev_kfree_skb_any(skb);
-                       skb = NULL;
+       if (tx_ring->used >= NUM_TCB)
+               goto drop_err;
 
-                       adapter->netdev->stats.tx_dropped++;
-               } else {
-                       status = send_packet(skb, adapter);
-                       if (status != 0 && status != -ENOMEM) {
-                               /* On any other error, make netif think we're
-                                * OK and drop the packet
-                                */
-                               dev_kfree_skb_any(skb);
-                               skb = NULL;
-                               adapter->netdev->stats.tx_dropped++;
-                       }
-               }
-       }
+       if ((adapter->flags & FMP_ADAPTER_FAIL_SEND_MASK) ||
+           !netif_carrier_ok(netdev))
+               goto drop_err;
 
-       /* Check status and manage the netif queue if necessary */
-       if (status != 0) {
-               if (status == -ENOMEM)
-                       status = NETDEV_TX_BUSY;
-               else
-                       status = NETDEV_TX_OK;
-       }
-       return status;
+       if (send_packet(skb, adapter))
+               goto drop_err;
+
+       return NETDEV_TX_OK;
+
+drop_err:
+       dev_kfree_skb_any(skb);
+       skb = NULL;
+       adapter->netdev->stats.tx_dropped++;
+       return NETDEV_TX_OK;
 }
 
 /* et131x_tx_timeout - Timeout handler