|
@@ -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);
|