|
@@ -1541,31 +1541,19 @@ 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 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
|
|
|
|