]> 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 03c71f7698cb64ffd2aa1de3f31fc600648ce675..3af6516919b740cd55f717e2786b89cde4ff83ea 100644 (file)
@@ -19,6 +19,8 @@
  *
  */
 
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/fs.h>
@@ -32,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>
@@ -78,6 +81,7 @@
 
 #define GDROM_DEFAULT_TIMEOUT  (HZ * 7)
 
+static DEFINE_MUTEX(gdrom_mutex);
 static const struct {
        int sense_key;
        const char * const text;
@@ -339,8 +343,7 @@ static int gdrom_get_last_session(struct cdrom_device_info *cd_info,
                tocuse = 0;
                err = gdrom_readtoc_cmd(gd.toc, 0);
                if (err) {
-                       printk(KERN_INFO "GDROM: Could not get CD "
-                               "table of contents\n");
+                       pr_info("Could not get CD table of contents\n");
                        return -ENXIO;
                }
        }
@@ -357,8 +360,7 @@ static int gdrom_get_last_session(struct cdrom_device_info *cd_info,
        } while (track >= fentry);
 
        if ((track > 100) || (track < get_entry_track(gd.toc->first))) {
-               printk(KERN_INFO "GDROM: No data on the last "
-                       "session of the CD\n");
+               pr_info("No data on the last session of the CD\n");
                gdrom_getsense(NULL);
                return -ENXIO;
        }
@@ -451,14 +453,14 @@ static int gdrom_getsense(short *bufstring)
                goto cleanup_sense;
        insw(GDROM_DATA_REG, &sense, sense_command->buflen/2);
        if (sense[1] & 40) {
-               printk(KERN_INFO "GDROM: Drive not ready - command aborted\n");
+               pr_info("Drive not ready - command aborted\n");
                goto cleanup_sense;
        }
        sense_key = sense[1] & 0x0F;
        if (sense_key < ARRAY_SIZE(sense_texts))
-               printk(KERN_INFO "GDROM: %s\n", sense_texts[sense_key].text);
+               pr_info("%s\n", sense_texts[sense_key].text);
        else
-               printk(KERN_ERR "GDROM: Unknown sense key: %d\n", sense_key);
+               pr_err("Unknown sense key: %d\n", sense_key);
        if (bufstring) /* return addional sense data */
                memcpy(bufstring, &sense[4], 2);
        if (sense_key < 2)
@@ -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)
@@ -643,14 +657,13 @@ static void gdrom_request(struct request_queue *rq)
        struct request *req;
 
        while ((req = blk_fetch_request(rq)) != NULL) {
-               if (!blk_fs_request(req)) {
-                       printk(KERN_DEBUG "GDROM: Non-fs request ignored\n");
+               if (req->cmd_type != REQ_TYPE_FS) {
+                       printk(KERN_DEBUG "gdrom: Non-fs request ignored\n");
                        __blk_end_request_all(req, -EIO);
                        continue;
                }
                if (rq_data_dir(req) != READ) {
-                       printk(KERN_NOTICE "GDROM: Read only device -");
-                       printk(" write request ignored\n");
+                       pr_notice("Read only device - write request ignored\n");
                        __blk_end_request_all(req, -EIO);
                        continue;
                }
@@ -685,7 +698,7 @@ static int __devinit gdrom_outputversion(void)
        firmw_ver = kstrndup(id->firmver, 16, GFP_KERNEL);
        if (!firmw_ver)
                goto free_manuf_name;
-       printk(KERN_INFO "GDROM: %s from %s with firmware %s\n",
+       pr_info("%s from %s with firmware %s\n",
                model_name, manuf_name, firmw_ver);
        err = 0;
        kfree(firmw_ver);
@@ -757,7 +770,7 @@ static int __devinit probe_gdrom(struct platform_device *devptr)
        int err;
        /* Start the device */
        if (gdrom_execute_diagnostic() != 1) {
-               printk(KERN_WARNING "GDROM: ATA Probe for GDROM failed.\n");
+               pr_warning("ATA Probe for GDROM failed\n");
                return -ENODEV;
        }
        /* Print out firmware ID */
@@ -767,7 +780,7 @@ static int __devinit probe_gdrom(struct platform_device *devptr)
        gdrom_major = register_blkdev(0, GDROM_DEV_NAME);
        if (gdrom_major <= 0)
                return gdrom_major;
-       printk(KERN_INFO "GDROM: Registered with major number %d\n",
+       pr_info("Registered with major number %d\n",
                gdrom_major);
        /* Specify basic properties of drive */
        gd.cd_info = kzalloc(sizeof(struct cdrom_device_info), GFP_KERNEL);
@@ -818,7 +831,7 @@ probe_fail_no_disk:
        unregister_blkdev(gdrom_major, GDROM_DEV_NAME);
        gdrom_major = 0;
 probe_fail_no_mem:
-       printk(KERN_WARNING "GDROM: Probe failed - error is 0x%X\n", err);
+       pr_warning("Probe failed - error is 0x%X\n", err);
        return err;
 }