/* Don't re-enable interrupts if the driver had a fatal error
         * (e.g., FIFO read failure).
         */
-       if (work_done >= 0)
-               m_can_enable_all_interrupts(cdev);
+       if (work_done < 0)
+               m_can_disable_all_interrupts(cdev);
 
        return work_done;
 }
         */
        if ((ir & IR_RF0N) || (ir & IR_ERR_ALL_30X)) {
                cdev->irqstatus = ir;
-               m_can_disable_all_interrupts(cdev);
-               if (!cdev->is_peripheral)
+               if (!cdev->is_peripheral) {
+                       m_can_disable_all_interrupts(cdev);
                        napi_schedule(&cdev->napi);
-               else if (m_can_rx_peripheral(dev, ir) < 0)
+               } else if (m_can_rx_peripheral(dev, ir) < 0) {
                        goto out_fail;
+               }
        }
 
        if (cdev->version == 30) {