Browse Source

[SCSI] qla2xxx: Complete mailbox command timedout to avoid initialization failures during next reset cycle.

Complete the mailbox command timed out before initiating another abort cycle
to recover so that mailbox commands issued during next reset cycle don't fail
due to pending mailbox access timeout.

Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com>
Signed-off-by: Chad Dupuis <chad.dupuis@qlogic.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Giridhar Malavali 13 years ago
parent
commit
d33609607c
1 changed files with 4 additions and 0 deletions
  1. 4 0
      drivers/scsi/qla2xxx/qla_mbx.c

+ 4 - 0
drivers/scsi/qla2xxx/qla_mbx.c

@@ -342,6 +342,8 @@ qla2x00_mailbox_command(scsi_qla_host_t *vha, mbx_cmd_t *mcp)
 
 
 				set_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags);
 				set_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags);
 				clear_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
 				clear_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
+				/* Allow next mbx cmd to come in. */
+				complete(&ha->mbx_cmd_comp);
 				if (ha->isp_ops->abort_isp(vha)) {
 				if (ha->isp_ops->abort_isp(vha)) {
 					/* Failed. retry later. */
 					/* Failed. retry later. */
 					set_bit(ISP_ABORT_NEEDED,
 					set_bit(ISP_ABORT_NEEDED,
@@ -350,6 +352,7 @@ qla2x00_mailbox_command(scsi_qla_host_t *vha, mbx_cmd_t *mcp)
 				clear_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags);
 				clear_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags);
 				ql_dbg(ql_dbg_mbx, base_vha, 0x101f,
 				ql_dbg(ql_dbg_mbx, base_vha, 0x101f,
 				    "Finished abort_isp.\n");
 				    "Finished abort_isp.\n");
+				goto mbx_done;
 			}
 			}
 		}
 		}
 	}
 	}
@@ -358,6 +361,7 @@ premature_exit:
 	/* Allow next mbx cmd to come in. */
 	/* Allow next mbx cmd to come in. */
 	complete(&ha->mbx_cmd_comp);
 	complete(&ha->mbx_cmd_comp);
 
 
+mbx_done:
 	if (rval) {
 	if (rval) {
 		ql_dbg(ql_dbg_mbx, base_vha, 0x1020,
 		ql_dbg(ql_dbg_mbx, base_vha, 0x1020,
 		    "**** Failed mbx[0]=%x, mb[1]=%x, mb[2]=%x, cmd=%x ****.\n",
 		    "**** Failed mbx[0]=%x, mb[1]=%x, mb[2]=%x, cmd=%x ****.\n",