Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8eca3f39 authored by Andrew Vasquez's avatar Andrew Vasquez Committed by James Bottomley
Browse files

[SCSI] qla2xxx: Always serialize mailbox command execution.



Original code would incorrectly bypass serialization if the DPC
thread were performing a big-hammer operation (ISP abort).  This
short circuit, though rare, would subsequently stomp on a
secondary thread's mailbox command execution.  Found during
ISP81XX testing.

Signed-off-by: default avatarAndrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
parent 09ff36d3
Loading
Loading
Loading
Loading
+6 −10
Original line number Diff line number Diff line
@@ -58,15 +58,12 @@ qla2x00_mailbox_command(scsi_qla_host_t *vha, mbx_cmd_t *mcp)
	 * seconds. This is to serialize actual issuing of mailbox cmds during
	 * non ISP abort time.
	 */
	if (!abort_active) {
		if (!wait_for_completion_timeout(&ha->mbx_cmd_comp,
		    mcp->tov * HZ)) {
	if (!wait_for_completion_timeout(&ha->mbx_cmd_comp, mcp->tov * HZ)) {
		/* Timeout occurred. Return error. */
		DEBUG2_3_11(printk("%s(%ld): cmd access timeout. "
		    "Exiting.\n", __func__, base_vha->host_no));
		return QLA_FUNCTION_TIMEOUT;
	}
	}

	ha->flags.mbox_busy = 1;
	/* Save mailbox command for debug */
@@ -265,7 +262,6 @@ qla2x00_mailbox_command(scsi_qla_host_t *vha, mbx_cmd_t *mcp)
	}

	/* Allow next mbx cmd to come in. */
	if (!abort_active)
	complete(&ha->mbx_cmd_comp);

	if (rval) {