diff options
Diffstat (limited to 'drivers/s390/char/vmlogrdr.c')
-rw-r--r-- | drivers/s390/char/vmlogrdr.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/s390/char/vmlogrdr.c b/drivers/s390/char/vmlogrdr.c index a246bc73ae64..c31faefa2b3b 100644 --- a/drivers/s390/char/vmlogrdr.c +++ b/drivers/s390/char/vmlogrdr.c | |||
@@ -25,6 +25,7 @@ | |||
25 | #include <linux/kmod.h> | 25 | #include <linux/kmod.h> |
26 | #include <linux/cdev.h> | 26 | #include <linux/cdev.h> |
27 | #include <linux/device.h> | 27 | #include <linux/device.h> |
28 | #include <linux/smp_lock.h> | ||
28 | #include <linux/string.h> | 29 | #include <linux/string.h> |
29 | 30 | ||
30 | 31 | ||
@@ -310,9 +311,11 @@ static int vmlogrdr_open (struct inode *inode, struct file *filp) | |||
310 | return -ENOSYS; | 311 | return -ENOSYS; |
311 | 312 | ||
312 | /* Besure this device hasn't already been opened */ | 313 | /* Besure this device hasn't already been opened */ |
314 | lock_kernel(); | ||
313 | spin_lock_bh(&logptr->priv_lock); | 315 | spin_lock_bh(&logptr->priv_lock); |
314 | if (logptr->dev_in_use) { | 316 | if (logptr->dev_in_use) { |
315 | spin_unlock_bh(&logptr->priv_lock); | 317 | spin_unlock_bh(&logptr->priv_lock); |
318 | unlock_kernel(); | ||
316 | return -EBUSY; | 319 | return -EBUSY; |
317 | } | 320 | } |
318 | logptr->dev_in_use = 1; | 321 | logptr->dev_in_use = 1; |
@@ -356,7 +359,9 @@ static int vmlogrdr_open (struct inode *inode, struct file *filp) | |||
356 | || (logptr->iucv_path_severed)); | 359 | || (logptr->iucv_path_severed)); |
357 | if (logptr->iucv_path_severed) | 360 | if (logptr->iucv_path_severed) |
358 | goto out_record; | 361 | goto out_record; |
359 | return nonseekable_open(inode, filp); | 362 | ret = nonseekable_open(inode, filp); |
363 | unlock_kernel(); | ||
364 | return ret; | ||
360 | 365 | ||
361 | out_record: | 366 | out_record: |
362 | if (logptr->autorecording) | 367 | if (logptr->autorecording) |
@@ -366,6 +371,7 @@ out_path: | |||
366 | logptr->path = NULL; | 371 | logptr->path = NULL; |
367 | out_dev: | 372 | out_dev: |
368 | logptr->dev_in_use = 0; | 373 | logptr->dev_in_use = 0; |
374 | unlock_kernel(); | ||
369 | return -EIO; | 375 | return -EIO; |
370 | } | 376 | } |
371 | 377 | ||