diff options
Diffstat (limited to 'drivers/scsi/ipr.c')
-rw-r--r-- | drivers/scsi/ipr.c | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c index 01080b3acf5e..7ed4eef8347b 100644 --- a/drivers/scsi/ipr.c +++ b/drivers/scsi/ipr.c | |||
@@ -175,6 +175,8 @@ struct ipr_error_table_t ipr_error_table[] = { | |||
175 | "Qualified success"}, | 175 | "Qualified success"}, |
176 | {0x01080000, 1, 1, | 176 | {0x01080000, 1, 1, |
177 | "FFFE: Soft device bus error recovered by the IOA"}, | 177 | "FFFE: Soft device bus error recovered by the IOA"}, |
178 | {0x01088100, 0, 1, | ||
179 | "4101: Soft device bus fabric error"}, | ||
178 | {0x01170600, 0, 1, | 180 | {0x01170600, 0, 1, |
179 | "FFF9: Device sector reassign successful"}, | 181 | "FFF9: Device sector reassign successful"}, |
180 | {0x01170900, 0, 1, | 182 | {0x01170900, 0, 1, |
@@ -225,6 +227,8 @@ struct ipr_error_table_t ipr_error_table[] = { | |||
225 | "3109: IOA timed out a device command"}, | 227 | "3109: IOA timed out a device command"}, |
226 | {0x04088000, 0, 0, | 228 | {0x04088000, 0, 0, |
227 | "3120: SCSI bus is not operational"}, | 229 | "3120: SCSI bus is not operational"}, |
230 | {0x04088100, 0, 1, | ||
231 | "4100: Hard device bus fabric error"}, | ||
228 | {0x04118000, 0, 1, | 232 | {0x04118000, 0, 1, |
229 | "9000: IOA reserved area data check"}, | 233 | "9000: IOA reserved area data check"}, |
230 | {0x04118100, 0, 1, | 234 | {0x04118100, 0, 1, |
@@ -273,6 +277,14 @@ struct ipr_error_table_t ipr_error_table[] = { | |||
273 | "9091: Incorrect hardware configuration change has been detected"}, | 277 | "9091: Incorrect hardware configuration change has been detected"}, |
274 | {0x04678000, 0, 1, | 278 | {0x04678000, 0, 1, |
275 | "9073: Invalid multi-adapter configuration"}, | 279 | "9073: Invalid multi-adapter configuration"}, |
280 | {0x04678100, 0, 1, | ||
281 | "4010: Incorrect connection between cascaded expanders"}, | ||
282 | {0x04678200, 0, 1, | ||
283 | "4020: Connections exceed IOA design limits"}, | ||
284 | {0x04678300, 0, 1, | ||
285 | "4030: Incorrect multipath connection"}, | ||
286 | {0x04679000, 0, 1, | ||
287 | "4110: Unsupported enclosure function"}, | ||
276 | {0x046E0000, 0, 1, | 288 | {0x046E0000, 0, 1, |
277 | "FFF4: Command to logical unit failed"}, | 289 | "FFF4: Command to logical unit failed"}, |
278 | {0x05240000, 1, 0, | 290 | {0x05240000, 1, 0, |
@@ -297,6 +309,8 @@ struct ipr_error_table_t ipr_error_table[] = { | |||
297 | "9031: Array protection temporarily suspended, protection resuming"}, | 309 | "9031: Array protection temporarily suspended, protection resuming"}, |
298 | {0x06040600, 0, 1, | 310 | {0x06040600, 0, 1, |
299 | "9040: Array protection temporarily suspended, protection resuming"}, | 311 | "9040: Array protection temporarily suspended, protection resuming"}, |
312 | {0x06288000, 0, 1, | ||
313 | "3140: Device bus not ready to ready transition"}, | ||
300 | {0x06290000, 0, 1, | 314 | {0x06290000, 0, 1, |
301 | "FFFB: SCSI bus was reset"}, | 315 | "FFFB: SCSI bus was reset"}, |
302 | {0x06290500, 0, 0, | 316 | {0x06290500, 0, 0, |
@@ -319,6 +333,16 @@ struct ipr_error_table_t ipr_error_table[] = { | |||
319 | "3150: SCSI bus configuration error"}, | 333 | "3150: SCSI bus configuration error"}, |
320 | {0x06678100, 0, 1, | 334 | {0x06678100, 0, 1, |
321 | "9074: Asymmetric advanced function disk configuration"}, | 335 | "9074: Asymmetric advanced function disk configuration"}, |
336 | {0x06678300, 0, 1, | ||
337 | "4040: Incomplete multipath connection between IOA and enclosure"}, | ||
338 | {0x06678400, 0, 1, | ||
339 | "4041: Incomplete multipath connection between enclosure and device"}, | ||
340 | {0x06678500, 0, 1, | ||
341 | "9075: Incomplete multipath connection between IOA and remote IOA"}, | ||
342 | {0x06678600, 0, 1, | ||
343 | "9076: Configuration error, missing remote IOA"}, | ||
344 | {0x06679100, 0, 1, | ||
345 | "4050: Enclosure does not support a required multipath function"}, | ||
322 | {0x06690200, 0, 1, | 346 | {0x06690200, 0, 1, |
323 | "9041: Array protection temporarily suspended"}, | 347 | "9041: Array protection temporarily suspended"}, |
324 | {0x06698200, 0, 1, | 348 | {0x06698200, 0, 1, |
@@ -331,6 +355,10 @@ struct ipr_error_table_t ipr_error_table[] = { | |||
331 | "9072: Link not operational transition"}, | 355 | "9072: Link not operational transition"}, |
332 | {0x066B8200, 0, 1, | 356 | {0x066B8200, 0, 1, |
333 | "9032: Array exposed but still protected"}, | 357 | "9032: Array exposed but still protected"}, |
358 | {0x066B9100, 0, 1, | ||
359 | "4061: Multipath redundancy level got better"}, | ||
360 | {0x066B9200, 0, 1, | ||
361 | "4060: Multipath redundancy level got worse"}, | ||
334 | {0x07270000, 0, 0, | 362 | {0x07270000, 0, 0, |
335 | "Failure due to other device"}, | 363 | "Failure due to other device"}, |
336 | {0x07278000, 0, 1, | 364 | {0x07278000, 0, 1, |
@@ -4099,8 +4127,7 @@ static int ipr_get_autosense(struct ipr_cmnd *ipr_cmd) | |||
4099 | { | 4127 | { |
4100 | struct ipr_ioasa *ioasa = &ipr_cmd->ioasa; | 4128 | struct ipr_ioasa *ioasa = &ipr_cmd->ioasa; |
4101 | 4129 | ||
4102 | if ((be32_to_cpu(ioasa->ioasc_specific) & | 4130 | if ((be32_to_cpu(ioasa->ioasc_specific) & IPR_AUTOSENSE_VALID) == 0) |
4103 | (IPR_ADDITIONAL_STATUS_FMT | IPR_AUTOSENSE_VALID)) == 0) | ||
4104 | return 0; | 4131 | return 0; |
4105 | 4132 | ||
4106 | memcpy(ipr_cmd->scsi_cmd->sense_buffer, ioasa->auto_sense.data, | 4133 | memcpy(ipr_cmd->scsi_cmd->sense_buffer, ioasa->auto_sense.data, |
@@ -4190,7 +4217,8 @@ static void ipr_erp_start(struct ipr_ioa_cfg *ioa_cfg, | |||
4190 | case IPR_IOASC_NR_INIT_CMD_REQUIRED: | 4217 | case IPR_IOASC_NR_INIT_CMD_REQUIRED: |
4191 | break; | 4218 | break; |
4192 | default: | 4219 | default: |
4193 | scsi_cmd->result |= (DID_ERROR << 16); | 4220 | if (IPR_IOASC_SENSE_KEY(ioasc) > RECOVERED_ERROR) |
4221 | scsi_cmd->result |= (DID_ERROR << 16); | ||
4194 | if (!ipr_is_vset_device(res) && !ipr_is_naca_model(res)) | 4222 | if (!ipr_is_vset_device(res) && !ipr_is_naca_model(res)) |
4195 | res->needs_sync_complete = 1; | 4223 | res->needs_sync_complete = 1; |
4196 | break; | 4224 | break; |