Hi, > From: Felipe Balbi, Sent: Monday, May 21, 2018 5:05 PM <snip> > seems like it would be better to just move this like before > usb_ep_queue(): > > modified drivers/usb/gadget/function/f_printer.c > @@ -631,19 +631,19 @@ printer_write(struct file *fd, const char __user *buf, size_t len, loff_t *ptr) > return -EAGAIN; > } > > + list_add(&req->list, &dev->tx_reqs_active); > + > /* here, we unlock, and only unlock, to avoid deadlock. */ > spin_unlock(&dev->lock); > value = usb_ep_queue(dev->in_ep, req, GFP_ATOMIC); > spin_lock(&dev->lock); > if (value) { > + list_del(&req->list); > list_add(&req->list, &dev->tx_reqs); > spin_unlock_irqrestore(&dev->lock, flags); > mutex_unlock(&dev->lock_printer_io); > return -EAGAIN; > } > - > - list_add(&req->list, &dev->tx_reqs_active); > - > } > > spin_unlock_irqrestore(&dev->lock, flags); > > -- Thank you very much for your patch! This could resolve the issue. So, should I submit this your patch as your author? Best regards, Yoshihiro Shimoda > balbi