scsi: add scsi_setup_cmnd helper
Factor out command setup code that will be shared with the blk-mq code path. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> Reviewed-by: Webb Scales <webbnh@hp.com>
This commit is contained in:
Родитель
4f1e576575
Коммит
6af7a4ffa2
|
@ -1092,6 +1092,27 @@ static int scsi_setup_fs_cmnd(struct scsi_device *sdev, struct request *req)
|
||||||
return scsi_cmd_to_driver(cmd)->init_command(cmd);
|
return scsi_cmd_to_driver(cmd)->init_command(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int scsi_setup_cmnd(struct scsi_device *sdev, struct request *req)
|
||||||
|
{
|
||||||
|
struct scsi_cmnd *cmd = req->special;
|
||||||
|
|
||||||
|
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) {
|
||||||
|
case REQ_TYPE_FS:
|
||||||
|
return scsi_setup_fs_cmnd(sdev, req);
|
||||||
|
case REQ_TYPE_BLOCK_PC:
|
||||||
|
return scsi_setup_blk_pc_cmnd(sdev, req);
|
||||||
|
default:
|
||||||
|
return BLKPREP_KILL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
scsi_prep_state_check(struct scsi_device *sdev, struct request *req)
|
scsi_prep_state_check(struct scsi_device *sdev, struct request *req)
|
||||||
{
|
{
|
||||||
|
@ -1195,24 +1216,7 @@ static int scsi_prep_fn(struct request_queue *q, struct request *req)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!blk_rq_bytes(req))
|
ret = scsi_setup_cmnd(sdev, 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) {
|
|
||||||
case REQ_TYPE_FS:
|
|
||||||
ret = scsi_setup_fs_cmnd(sdev, req);
|
|
||||||
break;
|
|
||||||
case REQ_TYPE_BLOCK_PC:
|
|
||||||
ret = scsi_setup_blk_pc_cmnd(sdev, req);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ret = BLKPREP_KILL;
|
|
||||||
}
|
|
||||||
|
|
||||||
out:
|
out:
|
||||||
return scsi_prep_return(q, req, ret);
|
return scsi_prep_return(q, req, ret);
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче