diff options
Diffstat (limited to 'drivers/scsi/ipr.c')
-rw-r--r-- | drivers/scsi/ipr.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c index 0724b5810ee2..d871dd37d22c 100644 --- a/drivers/scsi/ipr.c +++ b/drivers/scsi/ipr.c | |||
@@ -4666,18 +4666,19 @@ static void ipr_erp_start(struct ipr_ioa_cfg *ioa_cfg, | |||
4666 | struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; | 4666 | struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd; |
4667 | struct ipr_resource_entry *res = scsi_cmd->device->hostdata; | 4667 | struct ipr_resource_entry *res = scsi_cmd->device->hostdata; |
4668 | u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc); | 4668 | u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc); |
4669 | u32 masked_ioasc = ioasc & IPR_IOASC_IOASC_MASK; | ||
4669 | 4670 | ||
4670 | if (!res) { | 4671 | if (!res) { |
4671 | ipr_scsi_eh_done(ipr_cmd); | 4672 | ipr_scsi_eh_done(ipr_cmd); |
4672 | return; | 4673 | return; |
4673 | } | 4674 | } |
4674 | 4675 | ||
4675 | if (!ipr_is_gscsi(res)) | 4676 | if (!ipr_is_gscsi(res) && masked_ioasc != IPR_IOASC_HW_DEV_BUS_STATUS) |
4676 | ipr_gen_sense(ipr_cmd); | 4677 | ipr_gen_sense(ipr_cmd); |
4677 | 4678 | ||
4678 | ipr_dump_ioasa(ioa_cfg, ipr_cmd, res); | 4679 | ipr_dump_ioasa(ioa_cfg, ipr_cmd, res); |
4679 | 4680 | ||
4680 | switch (ioasc & IPR_IOASC_IOASC_MASK) { | 4681 | switch (masked_ioasc) { |
4681 | case IPR_IOASC_ABORTED_CMD_TERM_BY_HOST: | 4682 | case IPR_IOASC_ABORTED_CMD_TERM_BY_HOST: |
4682 | if (ipr_is_naca_model(res)) | 4683 | if (ipr_is_naca_model(res)) |
4683 | scsi_cmd->result |= (DID_ABORT << 16); | 4684 | scsi_cmd->result |= (DID_ABORT << 16); |