catc: Combine failure cleanup code in catc_probe()
Signed-off-by: Ben Hutchings <ben@decadent.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>hifive-unleashed-5.1
parent
7926aff5c5
commit
d41149145f
|
@ -776,7 +776,7 @@ static int catc_probe(struct usb_interface *intf, const struct usb_device_id *id
|
||||||
struct net_device *netdev;
|
struct net_device *netdev;
|
||||||
struct catc *catc;
|
struct catc *catc;
|
||||||
u8 broadcast[ETH_ALEN];
|
u8 broadcast[ETH_ALEN];
|
||||||
int i, pktsz;
|
int i, pktsz, ret;
|
||||||
|
|
||||||
if (usb_set_interface(usbdev,
|
if (usb_set_interface(usbdev,
|
||||||
intf->altsetting->desc.bInterfaceNumber, 1)) {
|
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) ||
|
if ((!catc->ctrl_urb) || (!catc->tx_urb) ||
|
||||||
(!catc->rx_urb) || (!catc->irq_urb)) {
|
(!catc->rx_urb) || (!catc->irq_urb)) {
|
||||||
dev_err(&intf->dev, "No free urbs available.\n");
|
dev_err(&intf->dev, "No free urbs available.\n");
|
||||||
usb_free_urb(catc->ctrl_urb);
|
ret = -ENOMEM;
|
||||||
usb_free_urb(catc->tx_urb);
|
goto fail_free;
|
||||||
usb_free_urb(catc->rx_urb);
|
|
||||||
usb_free_urb(catc->irq_urb);
|
|
||||||
free_netdev(netdev);
|
|
||||||
return -ENOMEM;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The F5U011 has the same vendor/product as the netmate but a device version of 0x130 */
|
/* 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);
|
usb_set_intfdata(intf, catc);
|
||||||
|
|
||||||
SET_NETDEV_DEV(netdev, &intf->dev);
|
SET_NETDEV_DEV(netdev, &intf->dev);
|
||||||
if (register_netdev(netdev) != 0) {
|
ret = register_netdev(netdev);
|
||||||
usb_set_intfdata(intf, NULL);
|
if (ret)
|
||||||
usb_free_urb(catc->ctrl_urb);
|
goto fail_clear_intfdata;
|
||||||
usb_free_urb(catc->tx_urb);
|
|
||||||
usb_free_urb(catc->rx_urb);
|
|
||||||
usb_free_urb(catc->irq_urb);
|
|
||||||
free_netdev(netdev);
|
|
||||||
return -EIO;
|
|
||||||
}
|
|
||||||
return 0;
|
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)
|
static void catc_disconnect(struct usb_interface *intf)
|
||||||
|
|
Loading…
Reference in New Issue