scsi: reintroduce scsi_driver.init_command
[cascardo/linux.git] / drivers / scsi / sr.c
index 40d8592..93cbd36 100644 (file)
@@ -79,6 +79,7 @@ MODULE_ALIAS_SCSI_DEVICE(TYPE_WORM);
 static DEFINE_MUTEX(sr_mutex);
 static int sr_probe(struct device *);
 static int sr_remove(struct device *);
+static int sr_init_command(struct scsi_cmnd *SCpnt);
 static int sr_done(struct scsi_cmnd *);
 static int sr_runtime_suspend(struct device *dev);
 
@@ -94,6 +95,7 @@ static struct scsi_driver sr_template = {
                .remove         = sr_remove,
                .pm             = &sr_pm_ops,
        },
+       .init_command           = sr_init_command,
        .done                   = sr_done,
 };
 
@@ -378,21 +380,14 @@ static int sr_done(struct scsi_cmnd *SCpnt)
        return good_bytes;
 }
 
-static int sr_prep_fn(struct request_queue *q, struct request *rq)
+static int sr_init_command(struct scsi_cmnd *SCpnt)
 {
        int block = 0, this_count, s_size;
        struct scsi_cd *cd;
-       struct scsi_cmnd *SCpnt;
-       struct scsi_device *sdp = q->queuedata;
+       struct request *rq = SCpnt->request;
+       struct scsi_device *sdp = SCpnt->device;
        int ret;
 
-       if (rq->cmd_type == REQ_TYPE_BLOCK_PC) {
-               ret = scsi_setup_blk_pc_cmnd(sdp, rq);
-               goto out;
-       } else if (rq->cmd_type != REQ_TYPE_FS) {
-               ret = BLKPREP_KILL;
-               goto out;
-       }
        ret = scsi_setup_fs_cmnd(sdp, rq);
        if (ret != BLKPREP_OK)
                goto out;
@@ -517,7 +512,7 @@ static int sr_prep_fn(struct request_queue *q, struct request *rq)
         */
        ret = BLKPREP_OK;
  out:
-       return scsi_prep_return(q, rq, ret);
+       return ret;
 }
 
 static int sr_block_open(struct block_device *bdev, fmode_t mode)
@@ -718,7 +713,6 @@ static int sr_probe(struct device *dev)
 
        /* FIXME: need to handle a get_capabilities failure properly ?? */
        get_capabilities(cd);
-       blk_queue_prep_rq(sdev->request_queue, sr_prep_fn);
        sr_vendor_init(cd);
 
        disk->driverfs_dev = &sdev->sdev_gendev;
@@ -993,7 +987,6 @@ static int sr_remove(struct device *dev)
 
        scsi_autopm_get_device(cd->device);
 
-       blk_queue_prep_rq(cd->device->request_queue, scsi_prep_fn);
        del_gendisk(cd->disk);
 
        mutex_lock(&sr_ref_mutex);