lan78xx: Fix Smatch Warnings
authorWoojung.Huh@microchip.com <Woojung.Huh@microchip.com>
Tue, 11 Aug 2015 15:21:41 +0000 (15:21 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 12 Aug 2015 21:44:16 +0000 (14:44 -0700)
lan78xx.c:2282 tx_complete() warn: variable dereferenced before check 'skb' (see line 2249)
lan78xx.c:2885 lan78xx_bh() info: ignoring unreachable code.
lan78xx.c:3159 lan78xx_probe() info: ignoring unreachable code.

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Woojung Huh <woojung.huh@microchip.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/usb/lan78xx.c

index ec8bd34ce47b5e3cb8d5f1129f564784c649d52b..3a6a4c1283d6e4f957fd45f9c69e77a0fc960104 100644 (file)
@@ -2279,8 +2279,7 @@ static void tx_complete(struct urb *urb)
 
        usb_autopm_put_interface_async(dev->intf);
 
-       if (skb)
-               defer_bh(dev, skb, &dev->txq, tx_done);
+       defer_bh(dev, skb, &dev->txq, tx_done);
 }
 
 static void lan78xx_queue_skb(struct sk_buff_head *list,
@@ -2295,13 +2294,15 @@ static void lan78xx_queue_skb(struct sk_buff_head *list,
 netdev_tx_t lan78xx_start_xmit(struct sk_buff *skb, struct net_device *net)
 {
        struct lan78xx_net *dev = netdev_priv(net);
+       struct sk_buff *skb2 = NULL;
 
-       if (skb)
+       if (skb) {
                skb_tx_timestamp(skb);
+               skb2 = lan78xx_tx_prep(dev, skb, GFP_ATOMIC);
+       }
 
-       skb = lan78xx_tx_prep(dev, skb, GFP_ATOMIC);
-       if (skb) {
-               skb_queue_tail(&dev->txq_pend, skb);
+       if (skb2) {
+               skb_queue_tail(&dev->txq_pend, skb2);
 
                if (skb_queue_len(&dev->txq_pend) > 10)
                        netif_stop_queue(net);
@@ -2882,10 +2883,6 @@ static void lan78xx_bh(unsigned long param)
                        netdev_dbg(dev->net, "skb state %d\n", entry->state);
                        return;
                }
-               if (!dev->done.prev)
-                       BUG_ON(!dev->done.prev);
-               if (!dev->done.next)
-                       BUG_ON(!dev->done.next);
        }
 
        if (netif_device_present(dev->net) && netif_running(dev->net)) {
@@ -3156,7 +3153,6 @@ static int lan78xx_probe(struct usb_interface *intf,
 
        return 0;
 
-       usb_set_intfdata(intf, NULL);
 out3:
        lan78xx_unbind(dev, intf);
 out2: