| From d41149145f98fe26dcd0bfd1d6cc095e6e041418 Mon Sep 17 00:00:00 2001 |
| From: Ben Hutchings <ben@decadent.org.uk> |
| Date: Sat, 4 Feb 2017 16:56:56 +0000 |
| Subject: [PATCH] catc: Combine failure cleanup code in catc_probe() |
| |
| commit d41149145f98fe26dcd0bfd1d6cc095e6e041418 upstream. |
| |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| |
| diff --git a/drivers/net/usb/catc.c b/drivers/net/usb/catc.c |
| index 3daa41bdd4ea..985909eab72c 100644 |
| --- a/drivers/net/usb/catc.c |
| +++ b/drivers/net/usb/catc.c |
| @@ -776,7 +776,7 @@ static int catc_probe(struct usb_interface *intf, const struct usb_device_id *id |
| struct net_device *netdev; |
| struct catc *catc; |
| u8 broadcast[ETH_ALEN]; |
| - int i, pktsz; |
| + int i, pktsz, ret; |
| |
| if (usb_set_interface(usbdev, |
| intf->altsetting->desc.bInterfaceNumber, 1)) { |
| @@ -811,12 +811,8 @@ static int catc_probe(struct usb_interface *intf, const struct usb_device_id *id |
| if ((!catc->ctrl_urb) || (!catc->tx_urb) || |
| (!catc->rx_urb) || (!catc->irq_urb)) { |
| dev_err(&intf->dev, "No free urbs available.\n"); |
| - usb_free_urb(catc->ctrl_urb); |
| - usb_free_urb(catc->tx_urb); |
| - usb_free_urb(catc->rx_urb); |
| - usb_free_urb(catc->irq_urb); |
| - free_netdev(netdev); |
| - return -ENOMEM; |
| + ret = -ENOMEM; |
| + goto fail_free; |
| } |
| |
| /* The F5U011 has the same vendor/product as the netmate but a device version of 0x130 */ |
| @@ -913,16 +909,21 @@ static int catc_probe(struct usb_interface *intf, const struct usb_device_id *id |
| usb_set_intfdata(intf, catc); |
| |
| SET_NETDEV_DEV(netdev, &intf->dev); |
| - if (register_netdev(netdev) != 0) { |
| - usb_set_intfdata(intf, NULL); |
| - usb_free_urb(catc->ctrl_urb); |
| - usb_free_urb(catc->tx_urb); |
| - usb_free_urb(catc->rx_urb); |
| - usb_free_urb(catc->irq_urb); |
| - free_netdev(netdev); |
| - return -EIO; |
| - } |
| + ret = register_netdev(netdev); |
| + if (ret) |
| + goto fail_clear_intfdata; |
| + |
| return 0; |
| + |
| +fail_clear_intfdata: |
| + usb_set_intfdata(intf, NULL); |
| +fail_free: |
| + usb_free_urb(catc->ctrl_urb); |
| + usb_free_urb(catc->tx_urb); |
| + usb_free_urb(catc->rx_urb); |
| + usb_free_urb(catc->irq_urb); |
| + free_netdev(netdev); |
| + return ret; |
| } |
| |
| static void catc_disconnect(struct usb_interface *intf) |
| -- |
| 2.12.0 |
| |