723 spin_lock_irqsave(&dev->lock, flags);
724 }
725
726 while (likely(!list_empty(&dev->tx_reqs)) && len) {
727
728 if (len > USB_BUFSIZE)
729 size = USB_BUFSIZE;
730 else
731 size = len;
732
733 req = container_of(dev->tx_reqs.next, struct usb_request,
734 list);
735 list_del_init(&req->list);
736
737 req->complete = tx_complete;
738 req->length = size;
739
740
741 if (len > size)
742
743 req->zero = 0;
744 else
745
746
747
748 req->zero = ((len % dev->in_ep->maxpacket) == 0);
749
750
751 spin_unlock_irqrestore(&dev->lock, flags);
752
753 if (copy_from_user(req->buf, buf, size)) {
754 list_add(&req->list, &dev->tx_reqs);
755 spin_unlock(&dev->lock_printer_io);
756 return bytes_copied;
757 }
758
759 bytes_copied += size;
760 len -= size;
761 buf += size;
762
763 spin_lock_irqsave(&dev->lock, flags);