scsi: set sc_data_direction in common code
The data direction fiel in the SCSI command is derived only from the block request structure. Move setting it up into common code instead of duplicating it in the ULDs. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> Reviewed-by: Hannes Reinecke <hare@suse.de>
This commit is contained in:
parent
3868cf8ea7
commit
5158a899d8
|
@ -1068,13 +1068,6 @@ int scsi_setup_blk_pc_cmnd(struct scsi_device *sdev, struct request *req)
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd->cmd_len = req->cmd_len;
|
cmd->cmd_len = req->cmd_len;
|
||||||
if (!blk_rq_bytes(req))
|
|
||||||
cmd->sc_data_direction = DMA_NONE;
|
|
||||||
else if (rq_data_dir(req) == WRITE)
|
|
||||||
cmd->sc_data_direction = DMA_TO_DEVICE;
|
|
||||||
else
|
|
||||||
cmd->sc_data_direction = DMA_FROM_DEVICE;
|
|
||||||
|
|
||||||
cmd->transfersize = blk_rq_bytes(req);
|
cmd->transfersize = blk_rq_bytes(req);
|
||||||
cmd->allowed = req->retries;
|
cmd->allowed = req->retries;
|
||||||
return BLKPREP_OK;
|
return BLKPREP_OK;
|
||||||
|
@ -1203,6 +1196,13 @@ static int scsi_prep_fn(struct request_queue *q, struct request *req)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!blk_rq_bytes(req))
|
||||||
|
cmd->sc_data_direction = DMA_NONE;
|
||||||
|
else if (rq_data_dir(req) == WRITE)
|
||||||
|
cmd->sc_data_direction = DMA_TO_DEVICE;
|
||||||
|
else
|
||||||
|
cmd->sc_data_direction = DMA_FROM_DEVICE;
|
||||||
|
|
||||||
switch (req->cmd_type) {
|
switch (req->cmd_type) {
|
||||||
case REQ_TYPE_FS:
|
case REQ_TYPE_FS:
|
||||||
ret = scsi_setup_fs_cmnd(sdev, req);
|
ret = scsi_setup_fs_cmnd(sdev, req);
|
||||||
|
|
|
@ -994,14 +994,12 @@ static int sd_init_command(struct scsi_cmnd *SCpnt)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
SCpnt->cmnd[0] = WRITE_6;
|
SCpnt->cmnd[0] = WRITE_6;
|
||||||
SCpnt->sc_data_direction = DMA_TO_DEVICE;
|
|
||||||
|
|
||||||
if (blk_integrity_rq(rq))
|
if (blk_integrity_rq(rq))
|
||||||
sd_dif_prepare(rq, block, sdp->sector_size);
|
sd_dif_prepare(rq, block, sdp->sector_size);
|
||||||
|
|
||||||
} else if (rq_data_dir(rq) == READ) {
|
} else if (rq_data_dir(rq) == READ) {
|
||||||
SCpnt->cmnd[0] = READ_6;
|
SCpnt->cmnd[0] = READ_6;
|
||||||
SCpnt->sc_data_direction = DMA_FROM_DEVICE;
|
|
||||||
} else {
|
} else {
|
||||||
scmd_printk(KERN_ERR, SCpnt, "Unknown command %llx\n", (unsigned long long) rq->cmd_flags);
|
scmd_printk(KERN_ERR, SCpnt, "Unknown command %llx\n", (unsigned long long) rq->cmd_flags);
|
||||||
goto out;
|
goto out;
|
||||||
|
|
|
@ -438,11 +438,9 @@ static int sr_init_command(struct scsi_cmnd *SCpnt)
|
||||||
if (!cd->device->writeable)
|
if (!cd->device->writeable)
|
||||||
goto out;
|
goto out;
|
||||||
SCpnt->cmnd[0] = WRITE_10;
|
SCpnt->cmnd[0] = WRITE_10;
|
||||||
SCpnt->sc_data_direction = DMA_TO_DEVICE;
|
|
||||||
cd->cdi.media_written = 1;
|
cd->cdi.media_written = 1;
|
||||||
} else if (rq_data_dir(rq) == READ) {
|
} else if (rq_data_dir(rq) == READ) {
|
||||||
SCpnt->cmnd[0] = READ_10;
|
SCpnt->cmnd[0] = READ_10;
|
||||||
SCpnt->sc_data_direction = DMA_FROM_DEVICE;
|
|
||||||
} else {
|
} else {
|
||||||
blk_dump_rq_flags(rq, "Unknown sr command");
|
blk_dump_rq_flags(rq, "Unknown sr command");
|
||||||
goto out;
|
goto out;
|
||||||
|
|
Loading…
Reference in New Issue