02_scsi_requeue_use_scsi_requeue_command_in_scsi_retry_command.patch

        scsi_retry_command() orignally used scsi_queue_insert() for
        requeueing.  This patch makes it use scsi_retry_command()
        instead.  Adding a call to scsi_device_unbusy() is sufficient
        and the change also makes scsi_retry_command() symmetric with
        scsi_finish_command() in how it unbusies the command.  Also as
        there's nothing to return, make the function void.

Signed-off-by: Tejun Heo <[EMAIL PROTECTED]>

 scsi.c      |    8 ++++++--
 scsi_priv.h |    2 +-
 2 files changed, 7 insertions(+), 3 deletions(-)

Index: scsi-reqfn-export/drivers/scsi/scsi.c
===================================================================
--- scsi-reqfn-export.orig/drivers/scsi/scsi.c  2005-04-12 21:50:11.000000000 
+0900
+++ scsi-reqfn-export/drivers/scsi/scsi.c       2005-04-12 21:50:11.000000000 
+0900
@@ -669,8 +669,12 @@ static void scsi_softirq(struct softirq_
  *              level drivers should not become re-entrant as a result of
  *              this.
  */
-int scsi_retry_command(struct scsi_cmnd *cmd)
+void scsi_retry_command(struct scsi_cmnd *cmd)
 {
+       SCSI_LOG_MLQUEUE(1, printk("Retrying command %p\n", cmd));
+
+       scsi_device_unbusy(cmd->device);
+
        /*
         * Restore the SCSI command state.
         */
@@ -682,7 +686,7 @@ int scsi_retry_command(struct scsi_cmnd 
          */
        memset(cmd->sense_buffer, 0, sizeof(cmd->sense_buffer));
 
-       return scsi_queue_insert(cmd, SCSI_MLQUEUE_EH_RETRY);
+       scsi_requeue_command(cmd);
 }
 
 /*
Index: scsi-reqfn-export/drivers/scsi/scsi_priv.h
===================================================================
--- scsi-reqfn-export.orig/drivers/scsi/scsi_priv.h     2005-04-12 
21:50:11.000000000 +0900
+++ scsi-reqfn-export/drivers/scsi/scsi_priv.h  2005-04-12 21:50:11.000000000 
+0900
@@ -60,7 +60,7 @@ extern void scsi_exit_hosts(void);
 extern int scsi_setup_command_freelist(struct Scsi_Host *shost);
 extern void scsi_destroy_command_freelist(struct Scsi_Host *shost);
 extern void scsi_done(struct scsi_cmnd *cmd);
-extern int scsi_retry_command(struct scsi_cmnd *cmd);
+extern void scsi_retry_command(struct scsi_cmnd *cmd);
 extern int scsi_insert_special_req(struct scsi_request *sreq, int);
 extern void scsi_init_cmd_from_req(struct scsi_cmnd *cmd,
                struct scsi_request *sreq);

-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to