hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/media/usb/siano/smsusb.c
....@@ -179,6 +179,8 @@
179179
180180 for (i = 0; i < MAX_URBS; i++) {
181181 usb_kill_urb(&dev->surbs[i].urb);
182
+ if (dev->surbs[i].wq.func)
183
+ cancel_work_sync(&dev->surbs[i].wq);
182184
183185 if (dev->surbs[i].cb) {
184186 smscore_putbuffer(dev->coredev, dev->surbs[i].cb);
....@@ -453,12 +455,7 @@
453455 rc = smscore_register_device(&params, &dev->coredev, 0, mdev);
454456 if (rc < 0) {
455457 pr_err("smscore_register_device(...) failed, rc %d\n", rc);
456
- smsusb_term_device(intf);
457
-#ifdef CONFIG_MEDIA_CONTROLLER_DVB
458
- media_device_unregister(mdev);
459
-#endif
460
- kfree(mdev);
461
- return rc;
458
+ goto err_unregister_device;
462459 }
463460
464461 smscore_set_board_id(dev->coredev, board_id);
....@@ -475,8 +472,7 @@
475472 rc = smsusb_start_streaming(dev);
476473 if (rc < 0) {
477474 pr_err("smsusb_start_streaming(...) failed\n");
478
- smsusb_term_device(intf);
479
- return rc;
475
+ goto err_unregister_device;
480476 }
481477
482478 dev->state = SMSUSB_ACTIVE;
....@@ -484,13 +480,20 @@
484480 rc = smscore_start_device(dev->coredev);
485481 if (rc < 0) {
486482 pr_err("smscore_start_device(...) failed\n");
487
- smsusb_term_device(intf);
488
- return rc;
483
+ goto err_unregister_device;
489484 }
490485
491486 pr_debug("device 0x%p created\n", dev);
492487
493488 return rc;
489
+
490
+err_unregister_device:
491
+ smsusb_term_device(intf);
492
+#ifdef CONFIG_MEDIA_CONTROLLER_DVB
493
+ media_device_unregister(mdev);
494
+#endif
495
+ kfree(mdev);
496
+ return rc;
494497 }
495498
496499 static int smsusb_probe(struct usb_interface *intf,