O Oliver Neukum #
Message details and related content
Hi,
you have moved kill_urbs() below
cancel_work_sync(&desc->rxwork);
cancel_work_sync(&desc->service_outs_intr);
to close a race, as
rv = usb_submit_urb(desc->response, GFP_KERNEL);
in service_outstanding_interrupt() would submit the response URB,
right? Unfortunately we have in wdm_in_callback() the following code path
if (desc->rerr) {
/*
* Since there was an error, userspace may decide to not read
* any data after poll'ing.
* We should respond to further attempts from the device to send
* data, so that we can get unstuck.
*/
schedule_work(&desc->service_outs_intr);
It looks to me like we have a circular dependency here and this needs some
change to break. What do you think about the attached patch?
Regards
Oliver