mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-27 06:34:11 +08:00
scsi: core: add scsi_io_completion_reprep helper
Since the action "reprep" is called from two places, rather than repeat the code, make a new scsi_io_completion helper with "reprep" as its suffix. Signed-off-by: Douglas Gilbert <dgilbert@interlog.com> Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de> Reviewed-by: Bart Van Assche <bart.vanassche@wdc.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
da32baea17
commit
4ae61c68f7
@ -761,6 +761,20 @@ static blk_status_t scsi_result_to_blk_status(struct scsi_cmnd *cmd, int result)
|
||||
}
|
||||
}
|
||||
|
||||
/* Helper for scsi_io_completion() when "reprep" action required. */
|
||||
static void scsi_io_completion_reprep(struct scsi_cmnd *cmd,
|
||||
struct request_queue *q)
|
||||
{
|
||||
/* A new command will be prepared and issued. */
|
||||
if (q->mq_ops) {
|
||||
scsi_mq_requeue_cmd(cmd);
|
||||
} else {
|
||||
/* Unprep request and put it back at head of the queue. */
|
||||
scsi_release_buffers(cmd);
|
||||
scsi_requeue_command(q, cmd);
|
||||
}
|
||||
}
|
||||
|
||||
/* Helper for scsi_io_completion() when special action required. */
|
||||
static void scsi_io_completion_action(struct scsi_cmnd *cmd, int result)
|
||||
{
|
||||
@ -906,15 +920,7 @@ static void scsi_io_completion_action(struct scsi_cmnd *cmd, int result)
|
||||
return;
|
||||
/*FALLTHRU*/
|
||||
case ACTION_REPREP:
|
||||
/* Unprep the request and put it back at the head of the queue.
|
||||
* A new command will be prepared and issued.
|
||||
*/
|
||||
if (q->mq_ops) {
|
||||
scsi_mq_requeue_cmd(cmd);
|
||||
} else {
|
||||
scsi_release_buffers(cmd);
|
||||
scsi_requeue_command(q, cmd);
|
||||
}
|
||||
scsi_io_completion_reprep(cmd, q);
|
||||
break;
|
||||
case ACTION_RETRY:
|
||||
/* Retry the same command immediately */
|
||||
@ -1091,20 +1097,9 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
|
||||
* If there had been no error, but we have leftover bytes in the
|
||||
* requeues just queue the command up again.
|
||||
*/
|
||||
if (result == 0) {
|
||||
/*
|
||||
* Unprep the request and put it back at the head of the
|
||||
* queue. A new command will be prepared and issued.
|
||||
* This block is the same as case ACTION_REPREP in
|
||||
* scsi_io_completion_action() above.
|
||||
*/
|
||||
if (q->mq_ops) {
|
||||
scsi_mq_requeue_cmd(cmd);
|
||||
} else {
|
||||
scsi_release_buffers(cmd);
|
||||
scsi_requeue_command(q, cmd);
|
||||
}
|
||||
} else
|
||||
if (result == 0)
|
||||
scsi_io_completion_reprep(cmd, q);
|
||||
else
|
||||
scsi_io_completion_action(cmd, result);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user