aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/sr.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/sr.c')
-rw-r--r--drivers/scsi/sr.c19
1 files changed, 6 insertions, 13 deletions
diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c
index 40d85929aefe..93cbd36c990b 100644
--- a/drivers/scsi/sr.c
+++ b/drivers/scsi/sr.c
@@ -79,6 +79,7 @@ MODULE_ALIAS_SCSI_DEVICE(TYPE_WORM);
79static DEFINE_MUTEX(sr_mutex); 79static DEFINE_MUTEX(sr_mutex);
80static int sr_probe(struct device *); 80static int sr_probe(struct device *);
81static int sr_remove(struct device *); 81static int sr_remove(struct device *);
82static int sr_init_command(struct scsi_cmnd *SCpnt);
82static int sr_done(struct scsi_cmnd *); 83static int sr_done(struct scsi_cmnd *);
83static int sr_runtime_suspend(struct device *dev); 84static int sr_runtime_suspend(struct device *dev);
84 85
@@ -94,6 +95,7 @@ static struct scsi_driver sr_template = {
94 .remove = sr_remove, 95 .remove = sr_remove,
95 .pm = &sr_pm_ops, 96 .pm = &sr_pm_ops,
96 }, 97 },
98 .init_command = sr_init_command,
97 .done = sr_done, 99 .done = sr_done,
98}; 100};
99 101
@@ -378,21 +380,14 @@ static int sr_done(struct scsi_cmnd *SCpnt)
378 return good_bytes; 380 return good_bytes;
379} 381}
380 382
381static int sr_prep_fn(struct request_queue *q, struct request *rq) 383static int sr_init_command(struct scsi_cmnd *SCpnt)
382{ 384{
383 int block = 0, this_count, s_size; 385 int block = 0, this_count, s_size;
384 struct scsi_cd *cd; 386 struct scsi_cd *cd;
385 struct scsi_cmnd *SCpnt; 387 struct request *rq = SCpnt->request;
386 struct scsi_device *sdp = q->queuedata; 388 struct scsi_device *sdp = SCpnt->device;
387 int ret; 389 int ret;
388 390
389 if (rq->cmd_type == REQ_TYPE_BLOCK_PC) {
390 ret = scsi_setup_blk_pc_cmnd(sdp, rq);
391 goto out;
392 } else if (rq->cmd_type != REQ_TYPE_FS) {
393 ret = BLKPREP_KILL;
394 goto out;
395 }
396 ret = scsi_setup_fs_cmnd(sdp, rq); 391 ret = scsi_setup_fs_cmnd(sdp, rq);
397 if (ret != BLKPREP_OK) 392 if (ret != BLKPREP_OK)
398 goto out; 393 goto out;
@@ -517,7 +512,7 @@ static int sr_prep_fn(struct request_queue *q, struct request *rq)
517 */ 512 */
518 ret = BLKPREP_OK; 513 ret = BLKPREP_OK;
519 out: 514 out:
520 return scsi_prep_return(q, rq, ret); 515 return ret;
521} 516}
522 517
523static int sr_block_open(struct block_device *bdev, fmode_t mode) 518static int sr_block_open(struct block_device *bdev, fmode_t mode)
@@ -718,7 +713,6 @@ static int sr_probe(struct device *dev)
718 713
719 /* FIXME: need to handle a get_capabilities failure properly ?? */ 714 /* FIXME: need to handle a get_capabilities failure properly ?? */
720 get_capabilities(cd); 715 get_capabilities(cd);
721 blk_queue_prep_rq(sdev->request_queue, sr_prep_fn);
722 sr_vendor_init(cd); 716 sr_vendor_init(cd);
723 717
724 disk->driverfs_dev = &sdev->sdev_gendev; 718 disk->driverfs_dev = &sdev->sdev_gendev;
@@ -993,7 +987,6 @@ static int sr_remove(struct device *dev)
993 987
994 scsi_autopm_get_device(cd->device); 988 scsi_autopm_get_device(cd->device);
995 989
996 blk_queue_prep_rq(cd->device->request_queue, scsi_prep_fn);
997 del_gendisk(cd->disk); 990 del_gendisk(cd->disk);
998 991
999 mutex_lock(&sr_ref_mutex); 992 mutex_lock(&sr_ref_mutex);