From aa5aa4c803b9b0026ccf7d496c832191e949ebe9 Mon Sep 17 00:00:00 2001 From: Oliver Neukum Date: Wed, 9 Sep 2009 17:08:50 +0200 Subject: [PATCH] --- yaml --- r: 165056 b: refs/heads/master c: 8cd01664344e983d73a85ce604f7c23f475cf303 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/usb/usb-skeleton.c | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index a14d5f315ee2..2c3e6de89f4b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 798199867385417ba6494472e39c016e3340758c +refs/heads/master: 8cd01664344e983d73a85ce604f7c23f475cf303 diff --git a/trunk/drivers/usb/usb-skeleton.c b/trunk/drivers/usb/usb-skeleton.c index 768fda9064e9..ef8c877cdd41 100644 --- a/trunk/drivers/usb/usb-skeleton.c +++ b/trunk/drivers/usb/usb-skeleton.c @@ -268,6 +268,11 @@ static ssize_t skel_read(struct file *file, char *buffer, size_t count, loff_t * 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 @@ static ssize_t skel_read(struct file *file, char *buffer, size_t count, loff_t * 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);