Commit 6c8bc15f authored by Marc Kleine-Budde's avatar Marc Kleine-Budde

can: gs_usb: gs_usb_receive_bulk_callback(): count RX overflow errors also in case of OOM

In case of an RX overflow error from the CAN controller and an OOM
where no skb can be allocated, the error counters are not incremented.

Fix this by first incrementing the error counters and then allocate
the skb.

Fixes: d08e973a ("can: gs_usb: Added support for the GS_USB CAN devices")
Link: https://lore.kernel.org/all/20230718-gs_usb-cleanups-v1-7-c3b9154ec605@pengutronix.deSigned-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
parent 55ad95d9
...@@ -631,6 +631,9 @@ static void gs_usb_receive_bulk_callback(struct urb *urb) ...@@ -631,6 +631,9 @@ static void gs_usb_receive_bulk_callback(struct urb *urb)
} }
if (hf->flags & GS_CAN_FLAG_OVERFLOW) { if (hf->flags & GS_CAN_FLAG_OVERFLOW) {
stats->rx_over_errors++;
stats->rx_errors++;
skb = alloc_can_err_skb(netdev, &cf); skb = alloc_can_err_skb(netdev, &cf);
if (!skb) if (!skb)
goto resubmit_urb; goto resubmit_urb;
...@@ -638,8 +641,6 @@ static void gs_usb_receive_bulk_callback(struct urb *urb) ...@@ -638,8 +641,6 @@ static void gs_usb_receive_bulk_callback(struct urb *urb)
cf->can_id |= CAN_ERR_CRTL; cf->can_id |= CAN_ERR_CRTL;
cf->len = CAN_ERR_DLC; cf->len = CAN_ERR_DLC;
cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW; cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW;
stats->rx_over_errors++;
stats->rx_errors++;
netif_rx(skb); netif_rx(skb);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment