aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/char/vmur.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/s390/char/vmur.c')
-rw-r--r--drivers/s390/char/vmur.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/s390/char/vmur.c b/drivers/s390/char/vmur.c
index 49cba9effe89..0a9f1cccbe58 100644
--- a/drivers/s390/char/vmur.c
+++ b/drivers/s390/char/vmur.c
@@ -9,6 +9,7 @@
9 */ 9 */
10 10
11#include <linux/cdev.h> 11#include <linux/cdev.h>
12#include <linux/smp_lock.h>
12 13
13#include <asm/uaccess.h> 14#include <asm/uaccess.h>
14#include <asm/cio.h> 15#include <asm/cio.h>
@@ -669,7 +670,7 @@ static int ur_open(struct inode *inode, struct file *file)
669 670
670 if (accmode == O_RDWR) 671 if (accmode == O_RDWR)
671 return -EACCES; 672 return -EACCES;
672 673 lock_kernel();
673 /* 674 /*
674 * We treat the minor number as the devno of the ur device 675 * We treat the minor number as the devno of the ur device
675 * to find in the driver tree. 676 * to find in the driver tree.
@@ -677,8 +678,10 @@ static int ur_open(struct inode *inode, struct file *file)
677 devno = MINOR(file->f_dentry->d_inode->i_rdev); 678 devno = MINOR(file->f_dentry->d_inode->i_rdev);
678 679
679 urd = urdev_get_from_devno(devno); 680 urd = urdev_get_from_devno(devno);
680 if (!urd) 681 if (!urd) {
681 return -ENXIO; 682 rc = -ENXIO;
683 goto out;
684 }
682 685
683 spin_lock(&urd->open_lock); 686 spin_lock(&urd->open_lock);
684 while (urd->open_flag) { 687 while (urd->open_flag) {
@@ -721,6 +724,7 @@ static int ur_open(struct inode *inode, struct file *file)
721 goto fail_urfile_free; 724 goto fail_urfile_free;
722 urf->file_reclen = rc; 725 urf->file_reclen = rc;
723 file->private_data = urf; 726 file->private_data = urf;
727 unlock_kernel();
724 return 0; 728 return 0;
725 729
726fail_urfile_free: 730fail_urfile_free:
@@ -731,6 +735,8 @@ fail_unlock:
731 spin_unlock(&urd->open_lock); 735 spin_unlock(&urd->open_lock);
732fail_put: 736fail_put:
733 urdev_put(urd); 737 urdev_put(urd);
738out:
739 unlock_kernel();
734 return rc; 740 return rc;
735} 741}
736 742