rk: revert 20f3d0b+v3.0.66 to v3.0
[firefly-linux-kernel-4.4.55.git] / drivers / scsi / sd.c
index 515ec6d64fb43e4a46cfd59a3d3fd1c19cd7c693..953773cb26d9a6204a52d56e75884622632c4c0c 100644 (file)
@@ -1073,10 +1073,6 @@ static int sd_ioctl(struct block_device *bdev, fmode_t mode,
        SCSI_LOG_IOCTL(1, printk("sd_ioctl: disk=%s, cmd=0x%x\n",
                                                disk->disk_name, cmd));
 
-       error = scsi_verify_blk_ioctl(bdev, cmd);
-       if (error < 0)
-               return error;
-
        /*
         * If we are in the middle of error recovery, don't let anyone
         * else try and use this device.  Also, if error recovery fails, it
@@ -1099,7 +1095,7 @@ static int sd_ioctl(struct block_device *bdev, fmode_t mode,
                        error = scsi_ioctl(sdp, cmd, p);
                        break;
                default:
-                       error = scsi_cmd_blk_ioctl(bdev, mode, cmd, p);
+                       error = scsi_cmd_ioctl(disk->queue, disk, mode, cmd, p);
                        if (error != -ENOTTY)
                                break;
                        error = scsi_ioctl(sdp, cmd, p);
@@ -1269,11 +1265,6 @@ static int sd_compat_ioctl(struct block_device *bdev, fmode_t mode,
                           unsigned int cmd, unsigned long arg)
 {
        struct scsi_device *sdev = scsi_disk(bdev->bd_disk)->device;
-       int ret;
-
-       ret = scsi_verify_blk_ioctl(bdev, cmd);
-       if (ret < 0)
-               return -ENOIOCTLCMD;
 
        /*
         * If we are in the middle of error recovery, don't let anyone
@@ -1285,6 +1276,8 @@ static int sd_compat_ioctl(struct block_device *bdev, fmode_t mode,
                return -ENODEV;
               
        if (sdev->host->hostt->compat_ioctl) {
+               int ret;
+
                ret = sdev->host->hostt->compat_ioctl(sdev, cmd, (void __user *)arg);
 
                return ret;
@@ -2826,6 +2819,10 @@ static int __init init_sd(void)
        if (err)
                goto err_out;
 
+       err = scsi_register_driver(&sd_template.gendrv);
+       if (err)
+               goto err_out_class;
+
        sd_cdb_cache = kmem_cache_create("sd_ext_cdb", SD_EXT_CDB_SIZE,
                                         0, 0, NULL);
        if (!sd_cdb_cache) {
@@ -2839,15 +2836,8 @@ static int __init init_sd(void)
                goto err_out_cache;
        }
 
-       err = scsi_register_driver(&sd_template.gendrv);
-       if (err)
-               goto err_out_driver;
-
        return 0;
 
-err_out_driver:
-       mempool_destroy(sd_cdb_pool);
-
 err_out_cache:
        kmem_cache_destroy(sd_cdb_cache);
 
@@ -2870,10 +2860,10 @@ static void __exit exit_sd(void)
 
        SCSI_LOG_HLQUEUE(3, printk("exit_sd: exiting sd driver\n"));
 
-       scsi_unregister_driver(&sd_template.gendrv);
        mempool_destroy(sd_cdb_pool);
        kmem_cache_destroy(sd_cdb_cache);
 
+       scsi_unregister_driver(&sd_template.gendrv);
        class_unregister(&sd_disk_class);
 
        for (i = 0; i < SD_MAJORS; i++)