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 ret;
+       int 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
-        * may try and take the device offline, in which case all further
-        * access to the device is prohibited.
-        */
-       if (!scsi_block_when_processing_errors(sdev))
-               return -ENODEV;
+       error = scsi_ioctl_block_when_processing_errors(sdev, cmd,
+                       (mode & FMODE_NDELAY) != 0);
+       if (error)
+               return error;
               
-       if (sdev->host->hostt->compat_ioctl) {
-               ret = sdev->host->hostt->compat_ioctl(sdev, cmd, (void __user *)arg);
-
-               return ret;
-       }
-
        /* 
         * Let the static ioctl translation table take care of it.
         */
-       return -ENOIOCTLCMD; 
+       if (!sdev->host->hostt->compat_ioctl)
+               return -ENOIOCTLCMD; 
+       return sdev->host->hostt->compat_ioctl(sdev, cmd, (void __user *)arg);
 }
 #endif