wan: dlci/sdla transmit return dehacking
authorStephen Hemminger <shemminger@vyatta.com>
Fri, 4 Sep 2009 05:33:46 +0000 (05:33 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 7 Sep 2009 08:56:33 +0000 (01:56 -0700)
This is a brute force removal of the wierd slave interface done for
DLCI -> SDLA transmit. Before it was using non-standard return values
and freeing skb in caller.  This changes it to using normal return
values, and freeing in the callee.  Luckly only one driver pair was
doing this. Not tested on real hardware, in fact I wonder if this
driver pair is even being used by any users.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/wan/dlci.c
drivers/net/wan/sdla.c
include/linux/if_frad.h

index 69d269d32b5b71df1c702b382a6af530ae2e0d08..15d353f268b5fd907e9bc894c1f6147b8d27c2da 100644 (file)
@@ -186,46 +186,13 @@ static void dlci_receive(struct sk_buff *skb, struct net_device *dev)
                dev_kfree_skb(skb);
 }
 
-static netdev_tx_t dlci_transmit(struct sk_buff *skb,
-                                      struct net_device *dev)
+static netdev_tx_t dlci_transmit(struct sk_buff *skb, struct net_device *dev)
 {
-       struct dlci_local *dlp;
-       netdev_tx_t ret;
-
-       if (!skb || !dev)
-               return NETDEV_TX_OK;
-
-       dlp = netdev_priv(dev);
-
-       netif_stop_queue(dev);
-       
-       /* This is hackish, overloads driver specific return values
-          on top of normal transmit return! */
-       ret = dlp->slave->netdev_ops->ndo_start_xmit(skb, dlp->slave);
-       switch (ret)
-       {
-               case DLCI_RET_OK:
-                       dev->stats.tx_packets++;
-                       ret = NETDEV_TX_OK;
-                       break;
-               case DLCI_RET_ERR:
-                       dev->stats.tx_errors++;
-                       ret = NETDEV_TX_OK;
-                       break;
-               case DLCI_RET_DROP:
-                       dev->stats.tx_dropped++;
-                       ret = NETDEV_TX_BUSY;
-                       break;
-       }
-       /* Alan Cox recommends always returning 0, and always freeing the packet */
-       /* experience suggest a slightly more conservative approach */
+       struct dlci_local *dlp = netdev_priv(dev);
 
-       if (ret == NETDEV_TX_OK)
-       {
-               dev_kfree_skb(skb);
-               netif_wake_queue(dev);
-       }
-       return(ret);
+       if (skb)
+               dlp->slave->netdev_ops->ndo_start_xmit(skb, dlp->slave);
+       return NETDEV_TX_OK;
 }
 
 static int dlci_config(struct net_device *dev, struct dlci_conf __user *conf, int get)
index 63c76458431c2755cbd1c0f6497da19f796b6cc0..2b15a7e40d5b4de77965b2aa4c2d0c746fbd3e8a 100644 (file)
@@ -652,7 +652,7 @@ static int sdla_dlci_conf(struct net_device *slave, struct net_device *master, i
 
 /* NOTE: the DLCI driver deals with freeing the SKB!! */
 static netdev_tx_t sdla_transmit(struct sk_buff *skb,
-                                      struct net_device *dev)
+                                struct net_device *dev)
 {
        struct frad_local *flp;
        int               ret, addr, accept, i;
@@ -712,23 +712,21 @@ static netdev_tx_t sdla_transmit(struct sk_buff *skb,
                                }
                                break;
                }
+
                switch (ret)
                {
                        case SDLA_RET_OK:
                                dev->stats.tx_packets++;
-                               ret = DLCI_RET_OK;
                                break;
 
                        case SDLA_RET_CIR_OVERFLOW:
                        case SDLA_RET_BUF_OVERSIZE:
                        case SDLA_RET_NO_BUFS:
                                dev->stats.tx_dropped++;
-                               ret = DLCI_RET_DROP;
                                break;
 
                        default:
                                dev->stats.tx_errors++;
-                               ret = DLCI_RET_ERR;
                                break;
                }
        }
@@ -738,6 +736,8 @@ static netdev_tx_t sdla_transmit(struct sk_buff *skb,
                if(flp->master[i]!=NULL)
                        netif_wake_queue(flp->master[i]);
        }               
+
+       dev_kfree_skb(skb);
        return NETDEV_TX_OK;
 }
 
index 673f2209453d9e2237a15d848e29ff9ae2381f21..80b3a1056a5f8526c8604341f0a5ddce3f35a5b0 100644 (file)
@@ -69,11 +69,6 @@ struct dlci_conf {
 
 #define DLCI_VALID_FLAGS       0x000B
 
-/* FRAD driver uses these to indicate what it did with packet */
-#define DLCI_RET_OK            0x00
-#define DLCI_RET_ERR           0x01
-#define DLCI_RET_DROP          0x02
-
 /* defines for the actual Frame Relay hardware */
 #define FRAD_GET_CONF  (SIOCDEVPRIVATE)
 #define FRAD_SET_CONF  (SIOCDEVPRIVATE + 1)