aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/scsi_lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/scsi_lib.c')
-rw-r--r--drivers/scsi/scsi_lib.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 0e81e4cf8876..8df8267ce316 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1092,6 +1092,7 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
1092 } 1092 }
1093 scsi_end_request(cmd, 0, this_count, !result); 1093 scsi_end_request(cmd, 0, this_count, !result);
1094} 1094}
1095EXPORT_SYMBOL(scsi_io_completion);
1095 1096
1096/* 1097/*
1097 * Function: scsi_init_io() 1098 * Function: scsi_init_io()
@@ -1170,6 +1171,18 @@ static struct scsi_cmnd *scsi_get_cmd_from_req(struct scsi_device *sdev,
1170 return cmd; 1171 return cmd;
1171} 1172}
1172 1173
1174static void scsi_blk_pc_done(struct scsi_cmnd *cmd)
1175{
1176 BUG_ON(!blk_pc_request(cmd->request));
1177 /*
1178 * This will complete the whole command with uptodate=1 so
1179 * as far as the block layer is concerned the command completed
1180 * successfully. Since this is a REQ_BLOCK_PC command the
1181 * caller should check the request's errors value
1182 */
1183 scsi_io_completion(cmd, cmd->request_bufflen);
1184}
1185
1173int scsi_setup_blk_pc_cmnd(struct scsi_device *sdev, struct request *req) 1186int scsi_setup_blk_pc_cmnd(struct scsi_device *sdev, struct request *req)
1174{ 1187{
1175 struct scsi_cmnd *cmd; 1188 struct scsi_cmnd *cmd;
@@ -1219,6 +1232,7 @@ int scsi_setup_blk_pc_cmnd(struct scsi_device *sdev, struct request *req)
1219 cmd->transfersize = req->data_len; 1232 cmd->transfersize = req->data_len;
1220 cmd->allowed = req->retries; 1233 cmd->allowed = req->retries;
1221 cmd->timeout_per_command = req->timeout; 1234 cmd->timeout_per_command = req->timeout;
1235 cmd->done = scsi_blk_pc_done;
1222 return BLKPREP_OK; 1236 return BLKPREP_OK;
1223} 1237}
1224EXPORT_SYMBOL(scsi_setup_blk_pc_cmnd); 1238EXPORT_SYMBOL(scsi_setup_blk_pc_cmnd);