aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/char/vmur.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-07-14 17:48:31 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-07-14 17:48:31 -0400
commitd1794f2c5b5817eb79ccc5e00701ca748d1b073a (patch)
tree5a4c98e694e88a8c82f342d0cc9edb2a4cbbef36 /drivers/s390/char/vmur.c
parenta41eebab7537890409ea9dfe0fcda9b5fbdb090d (diff)
parent2fceef397f9880b212a74c418290ce69e7ac00eb (diff)
Merge branch 'bkl-removal' of git://git.lwn.net/linux-2.6
* 'bkl-removal' of git://git.lwn.net/linux-2.6: (146 commits) IB/umad: BKL is not needed for ib_umad_open() IB/uverbs: BKL is not needed for ib_uverbs_open() bf561-coreb: BKL unneeded for open() Call fasync() functions without the BKL snd/PCM: fasync BKL pushdown ipmi: fasync BKL pushdown ecryptfs: fasync BKL pushdown Bluetooth VHCI: fasync BKL pushdown tty_io: fasync BKL pushdown tun: fasync BKL pushdown i2o: fasync BKL pushdown mpt: fasync BKL pushdown Remove BKL from remote_llseek v2 Make FAT users happier by not deadlocking x86-mce: BKL pushdown vmwatchdog: BKL pushdown vmcp: BKL pushdown via-pmu: BKL pushdown uml-random: BKL pushdown uml-mmapper: BKL pushdown ...
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