summaryrefslogtreecommitdiff
path: root/drivers/char/briq_panel.c
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2008-05-20 21:15:41 +0400
committerJonathan Corbet <corbet@lwn.net>2008-06-21 00:05:55 +0400
commit556889a4ae89d5f2adf98cac58ecf9326b0d0297 (patch)
tree33348f1a09663a4f5717d22ad2517f9e378d3a84 /drivers/char/briq_panel.c
parent8324af6dddac11f9f7e9df8b784f6949ddb61b5d (diff)
downloadlinux-556889a4ae89d5f2adf98cac58ecf9326b0d0297.tar.xz
briq_panel: BKL pushdown
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'drivers/char/briq_panel.c')
-rw-r--r--drivers/char/briq_panel.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/char/briq_panel.c b/drivers/char/briq_panel.c
index b6f2639f903d..d8cff909001c 100644
--- a/drivers/char/briq_panel.c
+++ b/drivers/char/briq_panel.c
@@ -6,6 +6,7 @@
#include <linux/module.h>
+#include <linux/smp_lock.h>
#include <linux/types.h>
#include <linux/errno.h>
#include <linux/tty.h>
@@ -67,11 +68,15 @@ static void set_led(char state)
static int briq_panel_open(struct inode *ino, struct file *filep)
{
- /* enforce single access */
- if (vfd_is_open)
+ lock_kernel();
+ /* enforce single access, vfd_is_open is protected by BKL */
+ if (vfd_is_open) {
+ unlock_kernel();
return -EBUSY;
+ }
vfd_is_open = 1;
+ unlock_kernel();
return 0;
}