snsc: restore IRQs on error path in scdrv_write()
authorDan Carpenter <dan.carpenter@oracle.com>
Fri, 18 Nov 2016 11:30:57 +0000 (14:30 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 29 Nov 2016 19:25:34 +0000 (20:25 +0100)
This bug is as old as git.  We need to be calling spin_unlock_irqrestore()
instead of regular spin_unlock() here.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/char/snsc.c

index 10e5632..ec07f0e 100644 (file)
@@ -285,7 +285,7 @@ scdrv_write(struct file *file, const char __user *buf,
                DECLARE_WAITQUEUE(wait, current);
 
                if (file->f_flags & O_NONBLOCK) {
-                       spin_unlock(&sd->sd_wlock);
+                       spin_unlock_irqrestore(&sd->sd_wlock, flags);
                        up(&sd->sd_wbs);
                        return -EAGAIN;
                }