--- drivers/usb/class/usblp.c.orig 2004-03-05 17:09:00.412189056 +0000 +++ drivers/usb/class/usblp.c 2004-03-05 17:10:30.121551160 +0000 @@ -609,8 +609,10 @@ static ssize_t usblp_write(struct file * while (writecount < count) { if (!usblp->wcomplete) { barrier(); - if (file->f_flags & O_NONBLOCK) + if (file->f_flags & O_NONBLOCK) { + writecount += transfer_length; return writecount ? writecount : -EAGAIN; + } timeout = USBLP_WRITE_TIMEOUT; add_wait_queue(&usblp->wait, &wait); @@ -670,7 +672,8 @@ static ssize_t usblp_write(struct file * usblp->writeurb->transfer_buffer_length = transfer_length; - if (copy_from_user(usblp->writeurb->transfer_buffer, buffer + writecount, transfer_length)) { + if (copy_from_user(usblp->writeurb->transfer_buffer, + buffer + writecount, transfer_length)) { up(&usblp->sem); return writecount ? writecount : -EFAULT; }