Linux CAN drivers development
 help / color / mirror / Atom feed
* [PATCH] net: can: es58x: fully try proceeding with partial allocations
@ 2026-02-11 10:40 Oliver Neukum
  2026-02-11 13:06 ` Szymon Wilczek
  2026-02-13  9:00 ` Vincent Mailhol
  0 siblings, 2 replies; 3+ messages in thread
From: Oliver Neukum @ 2026-02-11 10:40 UTC (permalink / raw)
  To: swilczek.lx, mailhol, mkl, linux-can; +Cc: Oliver Neukum

Since b1979778e985 ("can: etas_es58x: allow partial RX URB
allocation to succeed") es58x_alloc_rx_urbs() sees a failure
to allocate and submit the full number of URBs as a success
and the driver will continue at reduced performance.

However, if you do so, there is no point in abandoning further
allocations or submissions, just because an earlier one failed.

Fixes: b1979778e985 ("can: etas_es58x: allow partial RX URB allocation to succeed")
Signed-off-by: Oliver Neukum <oneukum@suse.com>
---
 drivers/net/can/usb/etas_es58x/es58x_core.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/net/can/usb/etas_es58x/es58x_core.c b/drivers/net/can/usb/etas_es58x/es58x_core.c
index 19fa51821a89..9dc66932267f 100644
--- a/drivers/net/can/usb/etas_es58x/es58x_core.c
+++ b/drivers/net/can/usb/etas_es58x/es58x_core.c
@@ -1706,12 +1706,13 @@ static int es58x_alloc_rx_urbs(struct es58x_device *es58x_dev)
 	u8 *buf;
 	int i;
 	int ret = -EINVAL;
+	int allocated = 0;
 
 	for (i = 0; i < param->rx_urb_max; i++) {
 		ret = es58x_alloc_urb(es58x_dev, &urb, &buf, rx_buf_len,
 				      GFP_KERNEL);
 		if (ret)
-			break;
+			continue;
 
 		usb_fill_bulk_urb(urb, es58x_dev->udev, es58x_dev->rx_pipe,
 				  buf, rx_buf_len, es58x_read_bulk_callback,
@@ -1723,18 +1724,18 @@ static int es58x_alloc_rx_urbs(struct es58x_device *es58x_dev)
 			usb_unanchor_urb(urb);
 			usb_free_coherent(es58x_dev->udev, rx_buf_len,
 					  buf, urb->transfer_dma);
-			usb_free_urb(urb);
-			break;
+		} else {
+			allocated++;
 		}
 		usb_free_urb(urb);
 	}
 
-	if (i == 0) {
+	if (allocated == 0) {
 		dev_err(dev, "%s: Could not setup any rx URBs\n", __func__);
 		return ret;
 	}
 	dev_dbg(dev, "%s: Allocated %d rx URBs each of size %u\n",
-		__func__, i, rx_buf_len);
+		__func__, allocated, rx_buf_len);
 
 	return 0;
 }
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-02-13  9:00 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-11 10:40 [PATCH] net: can: es58x: fully try proceeding with partial allocations Oliver Neukum
2026-02-11 13:06 ` Szymon Wilczek
2026-02-13  9:00 ` Vincent Mailhol

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox