> > 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. Regards, Du, Changbin -- 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