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 <[email protected]>
Reviewed-by: Johannes Thumshirn <[email protected]>
Reviewed-by: Bart Van Assche <[email protected]>
---
 drivers/scsi/scsi_lib.c | 41 ++++++++++++++++++-----------------------
 1 file changed, 18 insertions(+), 23 deletions(-)

diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 16a7e6846cac..63dcb2a94e5d 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -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);
 }
 
-- 
2.17.1

Reply via email to