diff options
author | Wolfgang Grandegger <wg@grandegger.com> | 2009-07-20 08:06:40 +0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-07-20 23:28:29 +0400 |
commit | b3d0df7ca35018ebbc24fd102ed7021cf593ba74 (patch) | |
tree | 109a3480057ceeb8807f91877470046965153893 /drivers/net/can/dev.c | |
parent | e2372902d84af3443d421a984d812ec87eeb0758 (diff) | |
download | linux-b3d0df7ca35018ebbc24fd102ed7021cf593ba74.tar.xz |
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>
Diffstat (limited to 'drivers/net/can/dev.c')
-rw-r--r-- | drivers/net/can/dev.c | 4 |
1 files changed, 2 insertions, 2 deletions
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); |