rc = smscore_register_device(¶ms, &dev->coredev, 0, mdev);
        if (rc < 0) {
                pr_err("smscore_register_device(...) failed, rc %d\n", rc);
-               smsusb_term_device(intf);
-#ifdef CONFIG_MEDIA_CONTROLLER_DVB
-               media_device_unregister(mdev);
-#endif
-               kfree(mdev);
-               return rc;
+               goto err_unregister_device;
        }
 
        smscore_set_board_id(dev->coredev, board_id);
        rc = smsusb_start_streaming(dev);
        if (rc < 0) {
                pr_err("smsusb_start_streaming(...) failed\n");
-               smsusb_term_device(intf);
-               return rc;
+               goto err_unregister_device;
        }
 
        dev->state = SMSUSB_ACTIVE;
        rc = smscore_start_device(dev->coredev);
        if (rc < 0) {
                pr_err("smscore_start_device(...) failed\n");
-               smsusb_term_device(intf);
-               return rc;
+               goto err_unregister_device;
        }
 
        pr_debug("device 0x%p created\n", dev);
 
        return rc;
+
+err_unregister_device:
+       smsusb_term_device(intf);
+#ifdef CONFIG_MEDIA_CONTROLLER_DVB
+       media_device_unregister(mdev);
+#endif
+       kfree(mdev);
+       return rc;
 }
 
 static int smsusb_probe(struct usb_interface *intf,