can: ems_usb: Improved memory handling on ems_usb_start
authorSebastian Haas <dev@sebastianhaas.info>
Thu, 22 Dec 2011 22:58:34 +0000 (23:58 +0100)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Fri, 3 Feb 2012 00:21:25 +0000 (01:21 +0100)
Do not return from ems_usb_start if allocation fails. If not all URBs
could be allocated use the one already submitted.

Signed-off-by: Sebastian Haas <dev@sebastianhaas.info>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/usb/ems_usb.c

index 7dae64d..9783e02 100644 (file)
@@ -607,7 +607,8 @@ static int ems_usb_start(struct ems_usb *dev)
                if (!urb) {
                        dev_err(netdev->dev.parent,
                                "No memory left for URBs\n");
-                       return -ENOMEM;
+                       err = -ENOMEM;
+                       break;
                }
 
                buf = usb_alloc_coherent(dev->udev, RX_BUFFER_SIZE, GFP_KERNEL,
@@ -616,7 +617,8 @@ static int ems_usb_start(struct ems_usb *dev)
                        dev_err(netdev->dev.parent,
                                "No memory left for USB buffer\n");
                        usb_free_urb(urb);
-                       return -ENOMEM;
+                       err = -ENOMEM;
+                       break;
                }
 
                usb_fill_bulk_urb(urb, dev->udev, usb_rcvbulkpipe(dev->udev, 2),