diff options
author | Jonathan Corbet <corbet@lwn.net> | 2008-05-15 20:46:49 +0400 |
---|---|---|
committer | Jonathan Corbet <corbet@lwn.net> | 2008-06-21 00:05:47 +0400 |
commit | ecc38983f6c83f371fefb5a69a72e358fc7b1218 (patch) | |
tree | 86743fd4b4ab4b675e419326a897bbe95404fe42 /drivers | |
parent | fbc8a81d66bbbce3f0b4d5752f8bc8bb3c1fc439 (diff) | |
download | linux-ecc38983f6c83f371fefb5a69a72e358fc7b1218.tar.xz |
ipmi: cdev lock_kernel() pushdown
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/char/ipmi/ipmi_devintf.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/char/ipmi/ipmi_devintf.c b/drivers/char/ipmi/ipmi_devintf.c index 0246a2b8ce48..c816656d6bfb 100644 --- a/drivers/char/ipmi/ipmi_devintf.c +++ b/drivers/char/ipmi/ipmi_devintf.c @@ -43,6 +43,7 @@ #include <linux/init.h> #include <linux/device.h> #include <linux/compat.h> +#include <linux/smp_lock.h> struct ipmi_file_private { @@ -121,6 +122,7 @@ static int ipmi_open(struct inode *inode, struct file *file) if (!priv) return -ENOMEM; + lock_kernel(); priv->file = file; rv = ipmi_create_user(if_num, @@ -129,7 +131,7 @@ static int ipmi_open(struct inode *inode, struct file *file) &(priv->user)); if (rv) { kfree(priv); - return rv; + goto out; } file->private_data = priv; @@ -144,7 +146,9 @@ static int ipmi_open(struct inode *inode, struct file *file) priv->default_retries = -1; priv->default_retry_time_ms = 0; - return 0; +out: + unlock_kernel(); + return rv; } static int ipmi_release(struct inode *inode, struct file *file) |