mirror of https://gitee.com/openkylin/linux.git
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;
|
||||
|
||||
/* limit the number of URBs in flight to stop a user from using up all RAM */
|
||||
if (down_interruptible(&dev->limit_sem)) {
|
||||
retval = -ERESTARTSYS;
|
||||
goto exit;
|
||||
if (!file->f_flags & O_NONBLOCK) {
|
||||
if (down_interruptible(&dev->limit_sem)) {
|
||||
retval = -ERESTARTSYS;
|
||||
goto exit;
|
||||
}
|
||||
} else {
|
||||
if (down_trylock(&dev->limit_sem)) {
|
||||
retval = -EAGAIN;
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
|
||||
spin_lock_irq(&dev->err_lock);
|
||||
|
|
Loading…
Reference in New Issue