ssize_t skel_write (struct file * file, const char * buffer, size_t count, loff_t * ppos);
A device driver has to decide how to report I/O errors back to the user. The safest course is to wait for the transfer to finish before returning so that any errors will be reported reliably. skel_read works like this. But waiting for I/O is slow, so many drivers only check for errors during I/O initiation and do not report problems that occur during the actual transfer. That's what we will do here.
A driver concerned with maximum I/O throughput would use double-
Two urbs would be devoted to write transfers, so that one urb could always be active while the other was waiting for the user to send more data.