On Tue, Jan 05, 2016 at 04:09:47AM +0000, Du, Changbin wrote: > > > To avoid this, just dequeue the request first. After usb_ep_dequeue, the > > > request must be done or canceled. > > > > > > With this change, we can ensure no race condition in f_fs driver. But > > > actually I found some of the udc driver has analogical issue in its > > > dequeue implementation. For example, > > > 1) the dequeue function hold the controller's lock. > > > 2) before driver request controller to stop transfer, a request > > > completed. > > > 3) the controller trigger a interrupt, but its irq handler need wait > > > dequeue function to release the lock. > > > 4) dequeue function give back the request with negative status, and > > > release lock. > > > 5) irq handler get lock but the request has already been given back. > > > > > > > get unlock? > > > > During the interrupt handler, it should only handle the "data complete" > > interrupt on queued request; if the "data complete" interrupt occurs, but > > it belongs to nobody, it will handle noop. > > > > > > Best Regards, > > Peter Chen > > You are right, but the problem is the request->status is wrong. If the data > send out but report caller as -EINTR, it will introduce duplicate-send > issue. > Why -EINTR, the kernel-doc said it should return -ECONNRESET for active request, see include/linux/usb/gadget.h. -- Best Regards, Peter Chen -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html