]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - drivers/cdrom/gdrom.c
block: autoconvert trivial BKL users to private mutex
[net-next-2.6.git] / drivers / cdrom / gdrom.c
index 5219b57deb3693ff485174680221d0bb77580b3b..3af6516919b740cd55f717e2786b89cde4ff83ea 100644 (file)
@@ -34,6 +34,7 @@
 #include <linux/blkdev.h>
 #include <linux/interrupt.h>
 #include <linux/device.h>
+#include <linux/mutex.h>
 #include <linux/wait.h>
 #include <linux/workqueue.h>
 #include <linux/platform_device.h>
@@ -80,6 +81,7 @@
 
 #define GDROM_DEFAULT_TIMEOUT  (HZ * 7)
 
+static DEFINE_MUTEX(gdrom_mutex);
 static const struct {
        int sense_key;
        const char * const text;
@@ -492,12 +494,18 @@ static struct cdrom_device_ops gdrom_ops = {
 
 static int gdrom_bdops_open(struct block_device *bdev, fmode_t mode)
 {
-       return cdrom_open(gd.cd_info, bdev, mode);
+       int ret;
+       mutex_lock(&gdrom_mutex);
+       ret = cdrom_open(gd.cd_info, bdev, mode);
+       mutex_unlock(&gdrom_mutex);
+       return ret;
 }
 
 static int gdrom_bdops_release(struct gendisk *disk, fmode_t mode)
 {
+       mutex_lock(&gdrom_mutex);
        cdrom_release(gd.cd_info, mode);
+       mutex_unlock(&gdrom_mutex);
        return 0;
 }
 
@@ -509,7 +517,13 @@ static int gdrom_bdops_mediachanged(struct gendisk *disk)
 static int gdrom_bdops_ioctl(struct block_device *bdev, fmode_t mode,
        unsigned cmd, unsigned long arg)
 {
-       return cdrom_ioctl(gd.cd_info, bdev, mode, cmd, arg);
+       int ret;
+
+       mutex_lock(&gdrom_mutex);
+       ret = cdrom_ioctl(gd.cd_info, bdev, mode, cmd, arg);
+       mutex_unlock(&gdrom_mutex);
+
+       return ret;
 }
 
 static const struct block_device_operations gdrom_bdops = {
@@ -517,7 +531,7 @@ static const struct block_device_operations gdrom_bdops = {
        .open                   = gdrom_bdops_open,
        .release                = gdrom_bdops_release,
        .media_changed          = gdrom_bdops_mediachanged,
-       .locked_ioctl           = gdrom_bdops_ioctl,
+       .ioctl                  = gdrom_bdops_ioctl,
 };
 
 static irqreturn_t gdrom_command_interrupt(int irq, void *dev_id)