On Thu, Mar 11, 2021 at 07:03:54AM -0800, Lv Yunlong wrote: > In the implementation of usbtmc_free_int(), it already calls > kref_put() to free the data as shown below. So, in > usbtmc_disconnect, call an extra kref_put() is redundant. > > """ > static void usbtmc_free_int(struct usbtmc_device_data *data) > { > if (!data->iin_ep_present || !data->iin_urb) > return; > usb_kill_urb(data->iin_urb); > kfree(data->iin_buffer); > data->iin_buffer = NULL; > usb_free_urb(data->iin_urb); > data->iin_urb = NULL; > kref_put(&data->kref, usbtmc_delete); > } > """ > > Signed-off-by: Lv Yunlong <lyl2019@xxxxxxxxxxxxxxxx> > --- > drivers/usb/class/usbtmc.c | 1 - > 1 file changed, 1 deletion(-) > > diff --git a/drivers/usb/class/usbtmc.c b/drivers/usb/class/usbtmc.c > index 74d5a9c5238a..adcdd2df1949 100644 > --- a/drivers/usb/class/usbtmc.c > +++ b/drivers/usb/class/usbtmc.c > @@ -2494,7 +2494,6 @@ static void usbtmc_disconnect(struct usb_interface *intf) > } > mutex_unlock(&data->io_mutex); > usbtmc_free_int(data); > - kref_put(&data->kref, usbtmc_delete); Did you test this change? If not, please do so, I think the code is fine as-is. thanks, greg k-h