diff options
author | Arnd Bergmann <arnd@arndb.de> | 2010-06-02 08:28:52 -0400 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2010-10-05 09:01:10 -0400 |
commit | 2a48fc0ab24241755dc93bfd4f01d68efab47f5a (patch) | |
tree | fa9ae10ce89b26b7d8ae9ce24bdfda5e3007b763 /drivers/scsi | |
parent | 613655fa39ff6957754fa8ceb8559980920eb8ee (diff) |
block: autoconvert trivial BKL users to private mutex
The block device drivers have all gained new lock_kernel
calls from a recent pushdown, and some of the drivers
were already using the BKL before.
This turns the BKL into a set of per-driver mutexes.
Still need to check whether this is safe to do.
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>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/sr.c | 14 | ||||
-rw-r--r-- | drivers/scsi/st.c | 12 |
2 files changed, 13 insertions, 13 deletions
diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c index ba9c3e0387ce..e148341079b5 100644 --- a/drivers/scsi/sr.c +++ b/drivers/scsi/sr.c | |||
@@ -44,7 +44,6 @@ | |||
44 | #include <linux/init.h> | 44 | #include <linux/init.h> |
45 | #include <linux/blkdev.h> | 45 | #include <linux/blkdev.h> |
46 | #include <linux/mutex.h> | 46 | #include <linux/mutex.h> |
47 | #include <linux/smp_lock.h> | ||
48 | #include <linux/slab.h> | 47 | #include <linux/slab.h> |
49 | #include <asm/uaccess.h> | 48 | #include <asm/uaccess.h> |
50 | 49 | ||
@@ -76,6 +75,7 @@ MODULE_ALIAS_SCSI_DEVICE(TYPE_WORM); | |||
76 | CDC_CD_R|CDC_CD_RW|CDC_DVD|CDC_DVD_R|CDC_DVD_RAM|CDC_GENERIC_PACKET| \ | 75 | CDC_CD_R|CDC_CD_RW|CDC_DVD|CDC_DVD_R|CDC_DVD_RAM|CDC_GENERIC_PACKET| \ |
77 | CDC_MRW|CDC_MRW_W|CDC_RAM) | 76 | CDC_MRW|CDC_MRW_W|CDC_RAM) |
78 | 77 | ||
78 | static DEFINE_MUTEX(sr_mutex); | ||
79 | static int sr_probe(struct device *); | 79 | static int sr_probe(struct device *); |
80 | static int sr_remove(struct device *); | 80 | static int sr_remove(struct device *); |
81 | static int sr_done(struct scsi_cmnd *); | 81 | static int sr_done(struct scsi_cmnd *); |
@@ -470,24 +470,24 @@ static int sr_block_open(struct block_device *bdev, fmode_t mode) | |||
470 | struct scsi_cd *cd; | 470 | struct scsi_cd *cd; |
471 | int ret = -ENXIO; | 471 | int ret = -ENXIO; |
472 | 472 | ||
473 | lock_kernel(); | 473 | mutex_lock(&sr_mutex); |
474 | cd = scsi_cd_get(bdev->bd_disk); | 474 | cd = scsi_cd_get(bdev->bd_disk); |
475 | if (cd) { | 475 | if (cd) { |
476 | ret = cdrom_open(&cd->cdi, bdev, mode); | 476 | ret = cdrom_open(&cd->cdi, bdev, mode); |
477 | if (ret) | 477 | if (ret) |
478 | scsi_cd_put(cd); | 478 | scsi_cd_put(cd); |
479 | } | 479 | } |
480 | unlock_kernel(); | 480 | mutex_unlock(&sr_mutex); |
481 | return ret; | 481 | return ret; |
482 | } | 482 | } |
483 | 483 | ||
484 | static int sr_block_release(struct gendisk *disk, fmode_t mode) | 484 | static int sr_block_release(struct gendisk *disk, fmode_t mode) |
485 | { | 485 | { |
486 | struct scsi_cd *cd = scsi_cd(disk); | 486 | struct scsi_cd *cd = scsi_cd(disk); |
487 | lock_kernel(); | 487 | mutex_lock(&sr_mutex); |
488 | cdrom_release(&cd->cdi, mode); | 488 | cdrom_release(&cd->cdi, mode); |
489 | scsi_cd_put(cd); | 489 | scsi_cd_put(cd); |
490 | unlock_kernel(); | 490 | mutex_unlock(&sr_mutex); |
491 | return 0; | 491 | return 0; |
492 | } | 492 | } |
493 | 493 | ||
@@ -499,7 +499,7 @@ static int sr_block_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd, | |||
499 | void __user *argp = (void __user *)arg; | 499 | void __user *argp = (void __user *)arg; |
500 | int ret; | 500 | int ret; |
501 | 501 | ||
502 | lock_kernel(); | 502 | mutex_lock(&sr_mutex); |
503 | 503 | ||
504 | /* | 504 | /* |
505 | * Send SCSI addressing ioctls directly to mid level, send other | 505 | * Send SCSI addressing ioctls directly to mid level, send other |
@@ -529,7 +529,7 @@ static int sr_block_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd, | |||
529 | ret = scsi_ioctl(sdev, cmd, argp); | 529 | ret = scsi_ioctl(sdev, cmd, argp); |
530 | 530 | ||
531 | out: | 531 | out: |
532 | unlock_kernel(); | 532 | mutex_unlock(&sr_mutex); |
533 | return ret; | 533 | return ret; |
534 | } | 534 | } |
535 | 535 | ||
diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c index 24211d0efa6d..afdc3f5d915c 100644 --- a/drivers/scsi/st.c +++ b/drivers/scsi/st.c | |||
@@ -39,7 +39,6 @@ static const char *verstr = "20081215"; | |||
39 | #include <linux/cdev.h> | 39 | #include <linux/cdev.h> |
40 | #include <linux/delay.h> | 40 | #include <linux/delay.h> |
41 | #include <linux/mutex.h> | 41 | #include <linux/mutex.h> |
42 | #include <linux/smp_lock.h> | ||
43 | 42 | ||
44 | #include <asm/uaccess.h> | 43 | #include <asm/uaccess.h> |
45 | #include <asm/dma.h> | 44 | #include <asm/dma.h> |
@@ -76,6 +75,7 @@ static const char *verstr = "20081215"; | |||
76 | #include "st_options.h" | 75 | #include "st_options.h" |
77 | #include "st.h" | 76 | #include "st.h" |
78 | 77 | ||
78 | static DEFINE_MUTEX(st_mutex); | ||
79 | static int buffer_kbs; | 79 | static int buffer_kbs; |
80 | static int max_sg_segs; | 80 | static int max_sg_segs; |
81 | static int try_direct_io = TRY_DIRECT_IO; | 81 | static int try_direct_io = TRY_DIRECT_IO; |
@@ -1180,7 +1180,7 @@ static int st_open(struct inode *inode, struct file *filp) | |||
1180 | int dev = TAPE_NR(inode); | 1180 | int dev = TAPE_NR(inode); |
1181 | char *name; | 1181 | char *name; |
1182 | 1182 | ||
1183 | lock_kernel(); | 1183 | mutex_lock(&st_mutex); |
1184 | /* | 1184 | /* |
1185 | * We really want to do nonseekable_open(inode, filp); here, but some | 1185 | * We really want to do nonseekable_open(inode, filp); here, but some |
1186 | * versions of tar incorrectly call lseek on tapes and bail out if that | 1186 | * versions of tar incorrectly call lseek on tapes and bail out if that |
@@ -1189,7 +1189,7 @@ static int st_open(struct inode *inode, struct file *filp) | |||
1189 | filp->f_mode &= ~(FMODE_PREAD | FMODE_PWRITE); | 1189 | filp->f_mode &= ~(FMODE_PREAD | FMODE_PWRITE); |
1190 | 1190 | ||
1191 | if (!(STp = scsi_tape_get(dev))) { | 1191 | if (!(STp = scsi_tape_get(dev))) { |
1192 | unlock_kernel(); | 1192 | mutex_unlock(&st_mutex); |
1193 | return -ENXIO; | 1193 | return -ENXIO; |
1194 | } | 1194 | } |
1195 | 1195 | ||
@@ -1200,7 +1200,7 @@ static int st_open(struct inode *inode, struct file *filp) | |||
1200 | if (STp->in_use) { | 1200 | if (STp->in_use) { |
1201 | write_unlock(&st_dev_arr_lock); | 1201 | write_unlock(&st_dev_arr_lock); |
1202 | scsi_tape_put(STp); | 1202 | scsi_tape_put(STp); |
1203 | unlock_kernel(); | 1203 | mutex_unlock(&st_mutex); |
1204 | DEB( printk(ST_DEB_MSG "%s: Device already in use.\n", name); ) | 1204 | DEB( printk(ST_DEB_MSG "%s: Device already in use.\n", name); ) |
1205 | return (-EBUSY); | 1205 | return (-EBUSY); |
1206 | } | 1206 | } |
@@ -1249,14 +1249,14 @@ static int st_open(struct inode *inode, struct file *filp) | |||
1249 | retval = (-EIO); | 1249 | retval = (-EIO); |
1250 | goto err_out; | 1250 | goto err_out; |
1251 | } | 1251 | } |
1252 | unlock_kernel(); | 1252 | mutex_unlock(&st_mutex); |
1253 | return 0; | 1253 | return 0; |
1254 | 1254 | ||
1255 | err_out: | 1255 | err_out: |
1256 | normalize_buffer(STp->buffer); | 1256 | normalize_buffer(STp->buffer); |
1257 | STp->in_use = 0; | 1257 | STp->in_use = 0; |
1258 | scsi_tape_put(STp); | 1258 | scsi_tape_put(STp); |
1259 | unlock_kernel(); | 1259 | mutex_unlock(&st_mutex); |
1260 | return retval; | 1260 | return retval; |
1261 | 1261 | ||
1262 | } | 1262 | } |