Merge tag 'firewire-updates' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee139...
[cascardo/linux.git] / drivers / scsi / sr.c
index 2de44cc..8bd54a6 100644 (file)
@@ -88,9 +88,9 @@ static struct dev_pm_ops sr_pm_ops = {
 };
 
 static struct scsi_driver sr_template = {
-       .owner                  = THIS_MODULE,
        .gendrv = {
                .name           = "sr",
+               .owner          = THIS_MODULE,
                .probe          = sr_probe,
                .remove         = sr_remove,
                .pm             = &sr_pm_ops,
@@ -387,7 +387,7 @@ static int sr_init_command(struct scsi_cmnd *SCpnt)
        struct request *rq = SCpnt->request;
        int ret;
 
-       ret = scsi_init_io(SCpnt, GFP_ATOMIC);
+       ret = scsi_init_io(SCpnt);
        if (ret != BLKPREP_OK)
                goto out;
        SCpnt = rq->special;
@@ -549,6 +549,11 @@ static int sr_block_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd,
 
        mutex_lock(&sr_mutex);
 
+       ret = scsi_ioctl_block_when_processing_errors(sdev, cmd,
+                       (mode & FMODE_NDELAY) != 0);
+       if (ret)
+               goto out;
+
        /*
         * Send SCSI addressing ioctls directly to mid level, send other
         * ioctls to cdrom/block level.
@@ -564,16 +569,6 @@ static int sr_block_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd,
        if (ret != -ENOSYS)
                goto out;
 
-       /*
-        * ENODEV means that we didn't recognise the ioctl, or that we
-        * cannot execute it in the current device state.  In either
-        * case fall through to scsi_ioctl, which will return ENDOEV again
-        * if it doesn't recognise the ioctl
-        */
-       ret = scsi_nonblockable_ioctl(sdev, cmd, argp,
-                                       (mode & FMODE_NDELAY) != 0);
-       if (ret != -ENODEV)
-               goto out;
        ret = scsi_ioctl(sdev, cmd, argp);
 
 out: