USB: make usb-skeleton honor O_NONBLOCK in write path
usb:usb-skeleton: honor O_NONBLOCK in write path nonblocking writes are allowed by using down_trylock if necessary to reserve an URB Signed-off-by: Oliver Neukum <oliver@neukum.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
e7389cc9a7
commit
7981998673
@ -399,9 +399,16 @@ static ssize_t skel_write(struct file *file, const char *user_buffer, size_t cou
|
|||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
/* limit the number of URBs in flight to stop a user from using up all RAM */
|
/* limit the number of URBs in flight to stop a user from using up all RAM */
|
||||||
if (down_interruptible(&dev->limit_sem)) {
|
if (!file->f_flags & O_NONBLOCK) {
|
||||||
retval = -ERESTARTSYS;
|
if (down_interruptible(&dev->limit_sem)) {
|
||||||
goto exit;
|
retval = -ERESTARTSYS;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (down_trylock(&dev->limit_sem)) {
|
||||||
|
retval = -EAGAIN;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_lock_irq(&dev->err_lock);
|
spin_lock_irq(&dev->err_lock);
|
||||||
|
Loading…
Reference in New Issue
Block a user