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

Commit 8a048994 authored by Brian King's avatar Brian King Committed by James Bottomley
Browse files

[SCSI] ipr: Handle check condition status from disk array device



On newer levels of microcode for ipr RAID adapters supporting
multi-initiator configurations, the disk array, or VSET, resources
are capable of generating a check condition. This patch prevents
ipr from generating sense data in this scenario and retrieving it
from the logical device instead.

Signed-off-by: default avatarBrian King <brking@linux.vnet.ibm.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent 6bb04170
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -4666,18 +4666,19 @@ static void ipr_erp_start(struct ipr_ioa_cfg *ioa_cfg,
	struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd;
	struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd;
	struct ipr_resource_entry *res = scsi_cmd->device->hostdata;
	struct ipr_resource_entry *res = scsi_cmd->device->hostdata;
	u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
	u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
	u32 masked_ioasc = ioasc & IPR_IOASC_IOASC_MASK;


	if (!res) {
	if (!res) {
		ipr_scsi_eh_done(ipr_cmd);
		ipr_scsi_eh_done(ipr_cmd);
		return;
		return;
	}
	}


	if (!ipr_is_gscsi(res))
	if (!ipr_is_gscsi(res) && masked_ioasc != IPR_IOASC_HW_DEV_BUS_STATUS)
		ipr_gen_sense(ipr_cmd);
		ipr_gen_sense(ipr_cmd);


	ipr_dump_ioasa(ioa_cfg, ipr_cmd, res);
	ipr_dump_ioasa(ioa_cfg, ipr_cmd, res);


	switch (ioasc & IPR_IOASC_IOASC_MASK) {
	switch (masked_ioasc) {
	case IPR_IOASC_ABORTED_CMD_TERM_BY_HOST:
	case IPR_IOASC_ABORTED_CMD_TERM_BY_HOST:
		if (ipr_is_naca_model(res))
		if (ipr_is_naca_model(res))
			scsi_cmd->result |= (DID_ABORT << 16);
			scsi_cmd->result |= (DID_ABORT << 16);