Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

media: imon: drop redundant device references

Driver core holds a reference to the USB interface and its parent USB
device while the interface is bound to a driver and there is no need to
take additional references unless the structures are needed after
disconnect.

Drop the redundant device references to reduce cargo culting, make it
easier to spot drivers where extra references are needed, and reduce the
risk of memory leaks when drivers fail to release them.

Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>

authored by

Johan Hovold and committed by
Hans Verkuil
88796a18 50acaad3

+3 -10
+3 -10
drivers/media/rc/imon.c
··· 2250 2250 mutex_lock(&ictx->lock); 2251 2251 2252 2252 ictx->dev = dev; 2253 - ictx->usbdev_intf0 = usb_get_dev(interface_to_usbdev(intf)); 2253 + ictx->usbdev_intf0 = interface_to_usbdev(intf); 2254 2254 ictx->rx_urb_intf0 = rx_urb; 2255 2255 ictx->tx_urb = tx_urb; 2256 2256 ictx->rf_device = false; ··· 2308 2308 usb_kill_urb(ictx->rx_urb_intf0); 2309 2309 urb_submit_failed: 2310 2310 find_endpoint_failed: 2311 - usb_put_dev(ictx->usbdev_intf0); 2312 2311 mutex_unlock(&ictx->lock); 2313 2312 usb_free_urb(tx_urb); 2314 2313 tx_urb_alloc_failed: ··· 2337 2338 timer_setup(&ictx->ttimer, imon_touch_display_timeout, 0); 2338 2339 } 2339 2340 2340 - ictx->usbdev_intf1 = usb_get_dev(interface_to_usbdev(intf)); 2341 + ictx->usbdev_intf1 = interface_to_usbdev(intf); 2341 2342 ictx->rx_urb_intf1 = rx_urb; 2342 2343 2343 2344 ret = -ENODEV; ··· 2376 2377 input_unregister_device(ictx->touch); 2377 2378 touch_setup_failed: 2378 2379 find_endpoint_failed: 2379 - usb_put_dev(ictx->usbdev_intf1); 2380 2380 ictx->usbdev_intf1 = NULL; 2381 2381 mutex_unlock(&ictx->lock); 2382 2382 usb_free_urb(rx_urb); ··· 2424 2426 struct imon_context *ictx = NULL; 2425 2427 u16 vendor, product; 2426 2428 2427 - usbdev = usb_get_dev(interface_to_usbdev(interface)); 2429 + usbdev = interface_to_usbdev(interface); 2428 2430 iface_desc = interface->cur_altsetting; 2429 2431 ifnum = iface_desc->desc.bInterfaceNumber; 2430 2432 vendor = le16_to_cpu(usbdev->descriptor.idVendor); ··· 2493 2495 vendor, product, ifnum, 2494 2496 usbdev->bus->busnum, usbdev->devnum); 2495 2497 2496 - usb_put_dev(usbdev); 2497 - 2498 2498 return 0; 2499 2499 2500 2500 fail: 2501 - usb_put_dev(usbdev); 2502 2501 dev_err(dev, "unable to register, err %d\n", ret); 2503 2502 2504 2503 return ret; ··· 2546 2551 else if (ictx->display_type == IMON_DISPLAY_TYPE_VFD) 2547 2552 usb_deregister_dev(interface, &imon_vfd_class); 2548 2553 } 2549 - usb_put_dev(ictx->usbdev_intf0); 2550 2554 } else { 2551 2555 ictx->dev_present_intf1 = false; 2552 2556 usb_kill_urb(ictx->rx_urb_intf1); ··· 2553 2559 timer_delete_sync(&ictx->ttimer); 2554 2560 input_unregister_device(ictx->touch); 2555 2561 } 2556 - usb_put_dev(ictx->usbdev_intf1); 2557 2562 } 2558 2563 2559 2564 if (refcount_dec_and_test(&ictx->users))