netdev_dbg(dev, "bus-off mode interrupt\n");
                state = CAN_STATE_BUS_OFF;
                cf->can_id |= CAN_ERR_BUSOFF;
+               priv->can.can_stats.bus_off++;
                can_bus_off(dev);
        }
 
 
        case C_CAN_BUS_OFF:
                /* bus-off state */
                priv->can.state = CAN_STATE_BUS_OFF;
-               can_bus_off(dev);
+               priv->can.can_stats.bus_off++;
                break;
        default:
                break;
 
                cc770_write_reg(priv, control, CTRL_INI);
                cf->can_id |= CAN_ERR_BUSOFF;
                priv->can.state = CAN_STATE_BUS_OFF;
+               priv->can.can_stats.bus_off++;
                can_bus_off(dev);
        } else if (status & STAT_WARN) {
                cf->can_id |= CAN_ERR_CRTL;
 
                priv->can_stats.error_passive++;
                break;
        case CAN_STATE_BUS_OFF:
+               priv->can_stats.bus_off++;
+               break;
        default:
                break;
        };
        netdev_dbg(dev, "bus-off\n");
 
        netif_carrier_off(dev);
-       priv->can_stats.bus_off++;
 
        if (priv->restart_ms)
                mod_timer(&priv->restart_timer,
 
                if (status & SR_BS) {
                        state = CAN_STATE_BUS_OFF;
                        cf->can_id |= CAN_ERR_BUSOFF;
+                       mod->can.can_stats.bus_off++;
                        can_bus_off(dev);
                } else if (status & SR_ES) {
                        if (rxerr >= 128 || txerr >= 128)
 
                /* bus-off state */
                priv->can.state = CAN_STATE_BUS_OFF;
                m_can_disable_all_interrupts(priv);
+               priv->can.can_stats.bus_off++;
                can_bus_off(dev);
                break;
        default:
 
                pch_can_set_rx_all(priv, 0);
                state = CAN_STATE_BUS_OFF;
                cf->can_id |= CAN_ERR_BUSOFF;
+               priv->can.can_stats.bus_off++;
                can_bus_off(ndev);
        }
 
 
                priv->can.state = CAN_STATE_BUS_OFF;
                /* Clear interrupt condition */
                writeb(~RCAR_CAN_EIFR_BOEIF, &priv->regs->eifr);
+               priv->can.can_stats.bus_off++;
                can_bus_off(ndev);
                if (skb)
                        cf->can_id |= CAN_ERR_BUSOFF;
 
                                ++priv->can.can_stats.error_passive;
                        else if (can_state == CAN_STATE_BUS_OFF) {
                                /* this calls can_close_cleanup() */
+                               ++priv->can.can_stats.bus_off;
                                can_bus_off(netdev);
                                netif_stop_queue(netdev);
                        }
 
                if (priv->can.state == CAN_STATE_BUS_OFF) {
                        if (priv->can.restart_ms == 0) {
                                priv->force_quit = 1;
+                               priv->can.can_stats.bus_off++;
                                can_bus_off(net);
                                mcp251x_hw_sleep(spi);
                                break;
 
                hecc_clear_bit(priv, HECC_CANMC, HECC_CANMC_CCR);
                /* Disable all interrupts in bus-off to avoid int hog */
                hecc_write(priv, HECC_CANGIM, 0);
+               ++priv->can.can_stats.bus_off;
                can_bus_off(ndev);
        }
 
 
                        dev->can.state = CAN_STATE_BUS_OFF;
                        cf->can_id |= CAN_ERR_BUSOFF;
 
+                       dev->can.can_stats.bus_off++;
                        can_bus_off(dev->netdev);
                } else if (state & SJA1000_SR_ES) {
                        dev->can.state = CAN_STATE_ERROR_WARNING;
 
                        case ESD_BUSSTATE_BUSOFF:
                                priv->can.state = CAN_STATE_BUS_OFF;
                                cf->can_id |= CAN_ERR_BUSOFF;
+                               priv->can.can_stats.bus_off++;
                                can_bus_off(priv->netdev);
                                break;
                        case ESD_BUSSTATE_WARN:
 
        switch (new_state) {
        case CAN_STATE_BUS_OFF:
                cf->can_id |= CAN_ERR_BUSOFF;
+               mc->pdev->dev.can.can_stats.bus_off++;
                can_bus_off(mc->netdev);
                break;
 
 
        switch (new_state) {
        case CAN_STATE_BUS_OFF:
                can_frame->can_id |= CAN_ERR_BUSOFF;
+               dev->can.can_stats.bus_off++;
                can_bus_off(netdev);
                break;
 
 
        case USB_8DEV_STATUSMSG_BUSOFF:
                priv->can.state = CAN_STATE_BUS_OFF;
                cf->can_id |= CAN_ERR_BUSOFF;
+               priv->can.can_stats.bus_off++;
                can_bus_off(priv->netdev);
                break;
        case USB_8DEV_STATUSMSG_OVERRUN: