diff options
author | Arnd Bergmann <arnd@arndb.de> | 2010-06-02 08:28:52 -0400 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2010-09-15 15:00:45 -0400 |
commit | c45d15d24eb2b49bf734e1e5e7e103befb76b19b (patch) | |
tree | dd768c089fd3393e8fa2c4f4fb50cedb1044037d /drivers/scsi/dpt_i2o.c | |
parent | 49553c2ef88749dd502687f4eb9c258bb10a4f44 (diff) |
scsi: autoconvert trivial BKL users to private mutex
All these files use the big kernel lock in a trivial
way to serialize their private file operations,
typically resulting from an earlier semi-automatic
pushdown from VFS.
None of these drivers appears to want to lock against
other code, and they all use the BKL as the top-level
lock in their file operations, meaning that there
is no lock-order inversion problem.
Consequently, we can remove the BKL completely,
replacing it with a per-file mutex in every case.
Using a scripted approach means we can avoid
typos.
file=$1
name=$2
if grep -q lock_kernel ${file} ; then
if grep -q 'include.*linux.mutex.h' ${file} ; then
sed -i '/include.*<linux\/smp_lock.h>/d' ${file}
else
sed -i 's/include.*<linux\/smp_lock.h>.*$/include <linux\/mutex.h>/g' ${file}
fi
sed -i ${file} \
-e "/^#include.*linux.mutex.h/,$ {
1,/^\(static\|int\|long\)/ {
/^\(static\|int\|long\)/istatic DEFINE_MUTEX(${name}_mutex);
} }" \
-e "s/\(un\)*lock_kernel\>[ ]*()/mutex_\1lock(\&${name}_mutex)/g" \
-e '/[ ]*cycle_kernel_lock();/d'
else
sed -i -e '/include.*\<smp_lock.h\>/d' ${file} \
-e '/cycle_kernel_lock()/d'
fi
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: linux-scsi@vger.kernel.org
Cc: "James E.J. Bottomley" <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/dpt_i2o.c')
-rw-r--r-- | drivers/scsi/dpt_i2o.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/drivers/scsi/dpt_i2o.c b/drivers/scsi/dpt_i2o.c index ffc1edf5e80d..410ac1def8a6 100644 --- a/drivers/scsi/dpt_i2o.c +++ b/drivers/scsi/dpt_i2o.c | |||
@@ -49,7 +49,6 @@ MODULE_DESCRIPTION("Adaptec I2O RAID Driver"); | |||
49 | #include <linux/kernel.h> /* for printk */ | 49 | #include <linux/kernel.h> /* for printk */ |
50 | #include <linux/sched.h> | 50 | #include <linux/sched.h> |
51 | #include <linux/reboot.h> | 51 | #include <linux/reboot.h> |
52 | #include <linux/smp_lock.h> | ||
53 | #include <linux/spinlock.h> | 52 | #include <linux/spinlock.h> |
54 | #include <linux/dma-mapping.h> | 53 | #include <linux/dma-mapping.h> |
55 | 54 | ||
@@ -76,6 +75,7 @@ MODULE_DESCRIPTION("Adaptec I2O RAID Driver"); | |||
76 | * Needed for our management apps | 75 | * Needed for our management apps |
77 | *============================================================================ | 76 | *============================================================================ |
78 | */ | 77 | */ |
78 | static DEFINE_MUTEX(adpt_mutex); | ||
79 | static dpt_sig_S DPTI_sig = { | 79 | static dpt_sig_S DPTI_sig = { |
80 | {'d', 'P', 't', 'S', 'i', 'G'}, SIG_VERSION, | 80 | {'d', 'P', 't', 'S', 'i', 'G'}, SIG_VERSION, |
81 | #ifdef __i386__ | 81 | #ifdef __i386__ |
@@ -1732,12 +1732,12 @@ static int adpt_open(struct inode *inode, struct file *file) | |||
1732 | int minor; | 1732 | int minor; |
1733 | adpt_hba* pHba; | 1733 | adpt_hba* pHba; |
1734 | 1734 | ||
1735 | lock_kernel(); | 1735 | mutex_lock(&adpt_mutex); |
1736 | //TODO check for root access | 1736 | //TODO check for root access |
1737 | // | 1737 | // |
1738 | minor = iminor(inode); | 1738 | minor = iminor(inode); |
1739 | if (minor >= hba_count) { | 1739 | if (minor >= hba_count) { |
1740 | unlock_kernel(); | 1740 | mutex_unlock(&adpt_mutex); |
1741 | return -ENXIO; | 1741 | return -ENXIO; |
1742 | } | 1742 | } |
1743 | mutex_lock(&adpt_configuration_lock); | 1743 | mutex_lock(&adpt_configuration_lock); |
@@ -1748,7 +1748,7 @@ static int adpt_open(struct inode *inode, struct file *file) | |||
1748 | } | 1748 | } |
1749 | if (pHba == NULL) { | 1749 | if (pHba == NULL) { |
1750 | mutex_unlock(&adpt_configuration_lock); | 1750 | mutex_unlock(&adpt_configuration_lock); |
1751 | unlock_kernel(); | 1751 | mutex_unlock(&adpt_mutex); |
1752 | return -ENXIO; | 1752 | return -ENXIO; |
1753 | } | 1753 | } |
1754 | 1754 | ||
@@ -1759,7 +1759,7 @@ static int adpt_open(struct inode *inode, struct file *file) | |||
1759 | 1759 | ||
1760 | pHba->in_use = 1; | 1760 | pHba->in_use = 1; |
1761 | mutex_unlock(&adpt_configuration_lock); | 1761 | mutex_unlock(&adpt_configuration_lock); |
1762 | unlock_kernel(); | 1762 | mutex_unlock(&adpt_mutex); |
1763 | 1763 | ||
1764 | return 0; | 1764 | return 0; |
1765 | } | 1765 | } |
@@ -2160,9 +2160,9 @@ static long adpt_unlocked_ioctl(struct file *file, uint cmd, ulong arg) | |||
2160 | 2160 | ||
2161 | inode = file->f_dentry->d_inode; | 2161 | inode = file->f_dentry->d_inode; |
2162 | 2162 | ||
2163 | lock_kernel(); | 2163 | mutex_lock(&adpt_mutex); |
2164 | ret = adpt_ioctl(inode, file, cmd, arg); | 2164 | ret = adpt_ioctl(inode, file, cmd, arg); |
2165 | unlock_kernel(); | 2165 | mutex_unlock(&adpt_mutex); |
2166 | 2166 | ||
2167 | return ret; | 2167 | return ret; |
2168 | } | 2168 | } |
@@ -2176,7 +2176,7 @@ static long compat_adpt_ioctl(struct file *file, | |||
2176 | 2176 | ||
2177 | inode = file->f_dentry->d_inode; | 2177 | inode = file->f_dentry->d_inode; |
2178 | 2178 | ||
2179 | lock_kernel(); | 2179 | mutex_lock(&adpt_mutex); |
2180 | 2180 | ||
2181 | switch(cmd) { | 2181 | switch(cmd) { |
2182 | case DPT_SIGNATURE: | 2182 | case DPT_SIGNATURE: |
@@ -2194,7 +2194,7 @@ static long compat_adpt_ioctl(struct file *file, | |||
2194 | ret = -ENOIOCTLCMD; | 2194 | ret = -ENOIOCTLCMD; |
2195 | } | 2195 | } |
2196 | 2196 | ||
2197 | unlock_kernel(); | 2197 | mutex_unlock(&adpt_mutex); |
2198 | 2198 | ||
2199 | return ret; | 2199 | return ret; |
2200 | } | 2200 | } |