aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/aacraid
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/aacraid')
-rw-r--r--drivers/scsi/aacraid/linit.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
index cad6f9abaeb9..6e233362dd7b 100644
--- a/drivers/scsi/aacraid/linit.c
+++ b/drivers/scsi/aacraid/linit.c
@@ -38,7 +38,7 @@
38#include <linux/moduleparam.h> 38#include <linux/moduleparam.h>
39#include <linux/pci.h> 39#include <linux/pci.h>
40#include <linux/slab.h> 40#include <linux/slab.h>
41#include <linux/smp_lock.h> 41#include <linux/mutex.h>
42#include <linux/spinlock.h> 42#include <linux/spinlock.h>
43#include <linux/syscalls.h> 43#include <linux/syscalls.h>
44#include <linux/delay.h> 44#include <linux/delay.h>
@@ -76,6 +76,7 @@ MODULE_DESCRIPTION("Dell PERC2, 2/Si, 3/Si, 3/Di, "
76MODULE_LICENSE("GPL"); 76MODULE_LICENSE("GPL");
77MODULE_VERSION(AAC_DRIVER_FULL_VERSION); 77MODULE_VERSION(AAC_DRIVER_FULL_VERSION);
78 78
79static DEFINE_MUTEX(aac_mutex);
79static LIST_HEAD(aac_devices); 80static LIST_HEAD(aac_devices);
80static int aac_cfg_major = -1; 81static int aac_cfg_major = -1;
81char aac_driver_version[] = AAC_DRIVER_FULL_VERSION; 82char aac_driver_version[] = AAC_DRIVER_FULL_VERSION;
@@ -678,7 +679,7 @@ static int aac_cfg_open(struct inode *inode, struct file *file)
678 unsigned minor_number = iminor(inode); 679 unsigned minor_number = iminor(inode);
679 int err = -ENODEV; 680 int err = -ENODEV;
680 681
681 lock_kernel(); /* BKL pushdown: nothing else protects this list */ 682 mutex_lock(&aac_mutex); /* BKL pushdown: nothing else protects this list */
682 list_for_each_entry(aac, &aac_devices, entry) { 683 list_for_each_entry(aac, &aac_devices, entry) {
683 if (aac->id == minor_number) { 684 if (aac->id == minor_number) {
684 file->private_data = aac; 685 file->private_data = aac;
@@ -686,7 +687,7 @@ static int aac_cfg_open(struct inode *inode, struct file *file)
686 break; 687 break;
687 } 688 }
688 } 689 }
689 unlock_kernel(); 690 mutex_unlock(&aac_mutex);
690 691
691 return err; 692 return err;
692} 693}
@@ -711,9 +712,9 @@ static long aac_cfg_ioctl(struct file *file,
711 int ret; 712 int ret;
712 if (!capable(CAP_SYS_RAWIO)) 713 if (!capable(CAP_SYS_RAWIO))
713 return -EPERM; 714 return -EPERM;
714 lock_kernel(); 715 mutex_lock(&aac_mutex);
715 ret = aac_do_ioctl(file->private_data, cmd, (void __user *)arg); 716 ret = aac_do_ioctl(file->private_data, cmd, (void __user *)arg);
716 unlock_kernel(); 717 mutex_unlock(&aac_mutex);
717 718
718 return ret; 719 return ret;
719} 720}
@@ -722,7 +723,7 @@ static long aac_cfg_ioctl(struct file *file,
722static long aac_compat_do_ioctl(struct aac_dev *dev, unsigned cmd, unsigned long arg) 723static long aac_compat_do_ioctl(struct aac_dev *dev, unsigned cmd, unsigned long arg)
723{ 724{
724 long ret; 725 long ret;
725 lock_kernel(); 726 mutex_lock(&aac_mutex);
726 switch (cmd) { 727 switch (cmd) {
727 case FSACTL_MINIPORT_REV_CHECK: 728 case FSACTL_MINIPORT_REV_CHECK:
728 case FSACTL_SENDFIB: 729 case FSACTL_SENDFIB:
@@ -756,7 +757,7 @@ static long aac_compat_do_ioctl(struct aac_dev *dev, unsigned cmd, unsigned long
756 ret = -ENOIOCTLCMD; 757 ret = -ENOIOCTLCMD;
757 break; 758 break;
758 } 759 }
759 unlock_kernel(); 760 mutex_unlock(&aac_mutex);
760 return ret; 761 return ret;
761} 762}
762 763