mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-15 23:14:31 +08:00
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>
This commit is contained in:
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 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)
|
||||
|
Loading…
Reference in New Issue
Block a user