From: Wolfgang Grandegger <wg@grandegger.com>
Date: Mon, 20 Jul 2009 04:06:40 +0000 (+0000)
Subject: can: restart device even if dev_alloc_skb() fails
X-Git-Tag: firefly_0821_release~13027^2~148
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=b3d0df7ca35018ebbc24fd102ed7021cf593ba74;p=firefly-linux-kernel-4.4.55.git

can: restart device even if dev_alloc_skb() fails

If dev_alloc_skb() failed in can_restart(), the device was left behind
in the bus-off state. This patch restarts the device nevertheless.

Signed-off-by: Kurt Van Dijck <kurt.van.dijck@eia.be>
Signed-off-by: Wolfgang Grandegger <wg@grandegger.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
---

diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
index 574daddc21bf..06083c32869a 100644
--- a/drivers/net/can/dev.c
+++ b/drivers/net/can/dev.c
@@ -346,7 +346,7 @@ void can_restart(unsigned long data)
 	skb = dev_alloc_skb(sizeof(struct can_frame));
 	if (skb == NULL) {
 		err = -ENOMEM;
-		goto out;
+		goto restart;
 	}
 	skb->dev = dev;
 	skb->protocol = htons(ETH_P_CAN);
@@ -361,13 +361,13 @@ void can_restart(unsigned long data)
 	stats->rx_packets++;
 	stats->rx_bytes += cf->can_dlc;
 
+restart:
 	dev_dbg(dev->dev.parent, "restarted\n");
 	priv->can_stats.restarts++;
 
 	/* Now restart the device */
 	err = priv->do_set_mode(dev, CAN_MODE_START);
 
-out:
 	netif_carrier_on(dev);
 	if (err)
 		dev_err(dev->dev.parent, "Error %d during restart", err);