USB: O_NONBLOCK in read path of skeleton
authorOliver Neukum <oliver@neukum.org>
Wed, 9 Sep 2009 15:08:50 +0000 (17:08 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 23 Sep 2009 13:46:40 +0000 (06:46 -0700)
Non blocking IO is supported in the read path of usb-skeleton.
This is done by just not blocking. As support for handling signals
without stopping IO is already there, it can be used for O_NONBLOCK, too.

Signed-off-by: Oliver Neukum <oliver@neukum.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/usb-skeleton.c

index 768fda9..ef8c877 100644 (file)
@@ -268,6 +268,11 @@ retry:
        spin_unlock_irq(&dev->err_lock);
 
        if (ongoing_io) {
+               /* nonblocking IO shall not wait */
+               if (file->f_flags & O_NONBLOCK) {
+                       rv = -EAGAIN;
+                       goto exit;
+               }
                /*
                 * IO may take forever
                 * hence wait in an interruptible state
@@ -351,8 +356,9 @@ retry:
                rv = skel_do_read_io(dev, count);
                if (rv < 0)
                        goto exit;
-               else
+               else if (!file->f_flags & O_NONBLOCK)
                        goto retry;
+               rv = -EAGAIN;
        }
 exit:
        mutex_unlock(&dev->io_mutex);