rt2x00usb: Use usb anchor to manage URB
With current driver, it is observed that a URB is not completed while the USB disconnect is initiated. Due to that, the URB completion handler is trying to access the resource which was freed as a part of USB disconnect. Managing the URBs with anchor will make sure that all the URBs are handled gracefully before device gets disconnected. Signed-off-by: Vishal Thanki <vishalthanki@gmail.com> Acked-by: Stanislaw Gruszka <sgruszka@redhat.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:

committed by
Kalle Valo

parent
e32993eb3a
commit
8b4c000931
@@ -1422,11 +1422,14 @@ void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev)
|
||||
cancel_work_sync(&rt2x00dev->intf_work);
|
||||
cancel_delayed_work_sync(&rt2x00dev->autowakeup_work);
|
||||
cancel_work_sync(&rt2x00dev->sleep_work);
|
||||
#ifdef CONFIG_RT2X00_LIB_USB
|
||||
if (rt2x00_is_usb(rt2x00dev)) {
|
||||
usb_kill_anchored_urbs(rt2x00dev->anchor);
|
||||
hrtimer_cancel(&rt2x00dev->txstatus_timer);
|
||||
cancel_work_sync(&rt2x00dev->rxdone_work);
|
||||
cancel_work_sync(&rt2x00dev->txdone_work);
|
||||
}
|
||||
#endif
|
||||
if (rt2x00dev->workqueue)
|
||||
destroy_workqueue(rt2x00dev->workqueue);
|
||||
|
||||
|
Reference in New Issue
Block a user