diff options
Diffstat (limited to 'drivers/scsi/scsi_lib.c')
-rw-r--r-- | drivers/scsi/scsi_lib.c | 14 |
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 | } |
1095 | EXPORT_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 | ||
1174 | static 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 | |||
1173 | int scsi_setup_blk_pc_cmnd(struct scsi_device *sdev, struct request *req) | 1186 | int 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 | } |
1224 | EXPORT_SYMBOL(scsi_setup_blk_pc_cmnd); | 1238 | EXPORT_SYMBOL(scsi_setup_blk_pc_cmnd); |