Browse Source

can: ems_usb: Improved memory handling on ems_usb_start

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>
Sebastian Haas 13 years ago
parent
commit
2ee6850ca0
1 changed files with 4 additions and 2 deletions
  1. 4 2
      drivers/net/can/usb/ems_usb.c

+ 4 - 2
drivers/net/can/usb/ems_usb.c

@@ -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),