this fixes the questionable error return codes Paulo noticed
in usblp. I hope I really got all cases now.
if (!usblp->wcomplete) {
barrier();
if (file->f_flags & O_NONBLOCK)
- return -EAGAIN;
+ return writecount ? writecount : -EAGAIN;
timeout = USBLP_WRITE_TIMEOUT;
add_wait_queue(&usblp->wait, &wait);
usblp->writeurb->dev = usblp->dev;
usblp->wcomplete = 0;
- if (usb_submit_urb(usblp->writeurb, GFP_KERNEL)) {
- count = -EIO;
+ if (err = usb_submit_urb(usblp->writeurb, GFP_KERNEL)) {
+ count = err != -ENOMEM ? -EIO : (writecount ? writecount : -ENOMEM);
up (&usblp->sem);
break;
}