]> git.karo-electronics.de Git - linux-beck.git/commitdiff
[SCSI] qla2xxx: Rearranged and cleaned up the code for processing the pending commands.
authorGiridhar Malavali <giridhar.malavali@qlogic.com>
Fri, 23 Jul 2010 10:28:35 +0000 (15:28 +0500)
committerJames Bottomley <James.Bottomley@suse.de>
Wed, 28 Jul 2010 14:06:15 +0000 (09:06 -0500)
Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/qla2xxx/qla_def.h
drivers/scsi/qla2xxx/qla_gbl.h
drivers/scsi/qla2xxx/qla_init.c
drivers/scsi/qla2xxx/qla_os.c

index 7e11ccf0fe81e4e7b73f6d4e28dbd507a8711d6e..84e9c6b48ca375b3c1ac4966b17e6b808c390e29 100644 (file)
@@ -2981,9 +2981,15 @@ typedef struct scsi_qla_host {
 
 #define        QLA_DSDS_PER_IOCB       37
 
+#define CMD_SP(Cmnd)           ((Cmnd)->SCp.ptr)
+
+enum nexus_wait_type {
+       WAIT_HOST = 0,
+       WAIT_TARGET,
+       WAIT_LUN,
+};
+
 #include "qla_gbl.h"
 #include "qla_dbg.h"
 #include "qla_inline.h"
-
-#define CMD_SP(Cmnd)           ((Cmnd)->SCp.ptr)
 #endif
index 8b0a8ca9508629593172582b222cabac6205f667..4688ad2a559ea8ffb4c4000527ff756c497401fe 100644 (file)
@@ -292,7 +292,9 @@ extern int
 qla24xx_abort_target(struct fc_port *, unsigned int, int);
 extern int
 qla24xx_lun_reset(struct fc_port *, unsigned int, int);
-
+extern int
+qla2x00_eh_wait_for_pending_commands(scsi_qla_host_t *, unsigned int,
+       unsigned int, enum nexus_wait_type);
 extern int
 qla2x00_system_error(scsi_qla_host_t *);
 
@@ -569,7 +571,6 @@ extern int qla82xx_mbx_intr_enable(scsi_qla_host_t *);
 extern int qla82xx_mbx_intr_disable(scsi_qla_host_t *);
 extern void qla82xx_start_iocbs(srb_t *);
 extern int qla82xx_fcoe_ctx_reset(scsi_qla_host_t *);
-extern void qla82xx_wait_for_pending_commands(scsi_qla_host_t *);
 
 /* BSG related functions */
 extern int qla24xx_bsg_request(struct fc_bsg_job *);
index f6b1052a3834fe8eee75d5b7380c42b06ab19f4b..9b58a79c4ae53c99f3ff86f78676cba8366875b0 100644 (file)
@@ -3833,8 +3833,13 @@ qla2x00_abort_isp_cleanup(scsi_qla_host_t *vha)
        }
 
        /* Make sure for ISP 82XX IO DMA is complete */
-       if (IS_QLA82XX(ha))
-               qla82xx_wait_for_pending_commands(vha);
+       if (IS_QLA82XX(ha)) {
+               if (qla2x00_eh_wait_for_pending_commands(vha, 0, 0,
+                       WAIT_HOST) == QLA_SUCCESS) {
+                       DEBUG2(qla_printk(KERN_INFO, ha,
+                       "Done wait for pending commands\n"));
+               }
+       }
 
        /* Requeue all commands in outstanding command list. */
        qla2x00_abort_all_cmds(vha, DID_RESET << 16);
index fcdbf7a0be55675316ce88da83ae958e2fca0f72..86d352ab9c58e0b2361e0eb65bc05111520a1a7f 100644 (file)
@@ -903,24 +903,17 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd)
        return ret;
 }
 
-enum nexus_wait_type {
-       WAIT_HOST = 0,
-       WAIT_TARGET,
-       WAIT_LUN,
-};
-
-static int
+int
 qla2x00_eh_wait_for_pending_commands(scsi_qla_host_t *vha, unsigned int t,
-       unsigned int l, srb_t *sp, enum nexus_wait_type type)
+       unsigned int l, enum nexus_wait_type type)
 {
        int cnt, match, status;
        unsigned long flags;
        struct qla_hw_data *ha = vha->hw;
        struct req_que *req;
+       srb_t *sp;
 
        status = QLA_SUCCESS;
-       if (!sp)
-               return status;
 
        spin_lock_irqsave(&ha->hardware_lock, flags);
        req = vha->req;
@@ -958,24 +951,6 @@ qla2x00_eh_wait_for_pending_commands(scsi_qla_host_t *vha, unsigned int t,
        return status;
 }
 
-void qla82xx_wait_for_pending_commands(scsi_qla_host_t *vha)
-{
-       int cnt;
-       srb_t *sp;
-       struct req_que *req = vha->req;
-
-       DEBUG2(qla_printk(KERN_INFO, vha->hw,
-               "Waiting for pending commands\n"));
-       for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) {
-               sp = req->outstanding_cmds[cnt];
-               if (qla2x00_eh_wait_for_pending_commands(vha, 0, 0,
-                       sp, WAIT_HOST) == QLA_SUCCESS) {
-                       DEBUG2(qla_printk(KERN_INFO, vha->hw,
-                               "Done wait for pending commands\n"));
-               }
-       }
-}
-
 static char *reset_errors[] = {
        "HBA not online",
        "HBA not ready",
@@ -1011,7 +986,7 @@ __qla2xxx_eh_generic_reset(char *name, enum nexus_wait_type type,
                goto eh_reset_failed;
        err = 3;
        if (qla2x00_eh_wait_for_pending_commands(vha, cmd->device->id,
-           cmd->device->lun, (srb_t *) CMD_SP(cmd), type) != QLA_SUCCESS)
+           cmd->device->lun, type) != QLA_SUCCESS)
                goto eh_reset_failed;
 
        qla_printk(KERN_INFO, vha->hw, "scsi(%ld:%d:%d): %s RESET SUCCEEDED.\n",
@@ -1019,7 +994,7 @@ __qla2xxx_eh_generic_reset(char *name, enum nexus_wait_type type,
 
        return SUCCESS;
 
- eh_reset_failed:
+eh_reset_failed:
        qla_printk(KERN_INFO, vha->hw, "scsi(%ld:%d:%d): %s RESET FAILED: %s.\n"
            , vha->host_no, cmd->device->id, cmd->device->lun, name,
            reset_errors[err]);
@@ -1069,7 +1044,6 @@ qla2xxx_eh_bus_reset(struct scsi_cmnd *cmd)
        int ret = FAILED;
        unsigned int id, lun;
        unsigned long serial;
-       srb_t *sp = (srb_t *) CMD_SP(cmd);
 
        fc_block_scsi_eh(cmd);
 
@@ -1096,7 +1070,7 @@ qla2xxx_eh_bus_reset(struct scsi_cmnd *cmd)
                goto eh_bus_reset_done;
 
        /* Flush outstanding commands. */
-       if (qla2x00_eh_wait_for_pending_commands(vha, 0, 0, sp, WAIT_HOST) !=
+       if (qla2x00_eh_wait_for_pending_commands(vha, 0, 0, WAIT_HOST) !=
            QLA_SUCCESS)
                ret = FAILED;
 
@@ -1131,7 +1105,6 @@ qla2xxx_eh_host_reset(struct scsi_cmnd *cmd)
        int ret = FAILED;
        unsigned int id, lun;
        unsigned long serial;
-       srb_t *sp = (srb_t *) CMD_SP(cmd);
        scsi_qla_host_t *base_vha = pci_get_drvdata(ha->pdev);
 
        fc_block_scsi_eh(cmd);
@@ -1186,7 +1159,7 @@ qla2xxx_eh_host_reset(struct scsi_cmnd *cmd)
        }
 
        /* Waiting for command to be returned to OS.*/
-       if (qla2x00_eh_wait_for_pending_commands(vha, 0, 0, sp, WAIT_HOST) ==
+       if (qla2x00_eh_wait_for_pending_commands(vha, 0, 0, WAIT_HOST) ==
                QLA_SUCCESS)
                ret = SUCCESS;