[SCSI] ibmvfc: Fix for offlining devices during error recovery
This fixes an issue seen with devices getting marked offline in a scenario where a VIOS was getting rebooted while a client VFC adapter is in SCSI EH and prevents unnecessary EH escalation in some scenarios. Signed-off-by: Brian King <brking@linux.vnet.ibm.com> Acked-by: Robert Jennings <rcj@linux.vnet.ibm.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
72264eb6db
commit
c281e32aee
1 changed files with 13 additions and 2 deletions
|
@ -2208,7 +2208,10 @@ static int ibmvfc_cancel_all(struct scsi_device *sdev, int type)
|
|||
|
||||
if (rsp_rc != 0) {
|
||||
sdev_printk(KERN_ERR, sdev, "Failed to send cancel event. rc=%d\n", rsp_rc);
|
||||
return -EIO;
|
||||
/* If failure is received, the host adapter is most likely going
|
||||
through reset, return success so the caller will wait for the command
|
||||
being cancelled to get returned */
|
||||
return 0;
|
||||
}
|
||||
|
||||
sdev_printk(KERN_INFO, sdev, "Cancelling outstanding commands.\n");
|
||||
|
@ -2221,7 +2224,15 @@ static int ibmvfc_cancel_all(struct scsi_device *sdev, int type)
|
|||
|
||||
if (status != IBMVFC_MAD_SUCCESS) {
|
||||
sdev_printk(KERN_WARNING, sdev, "Cancel failed with rc=%x\n", status);
|
||||
return -EIO;
|
||||
switch (status) {
|
||||
case IBMVFC_MAD_DRIVER_FAILED:
|
||||
case IBMVFC_MAD_CRQ_ERROR:
|
||||
/* Host adapter most likely going through reset, return success to
|
||||
the caller will wait for the command being cancelled to get returned */
|
||||
return 0;
|
||||
default:
|
||||
return -EIO;
|
||||
};
|
||||
}
|
||||
|
||||
sdev_printk(KERN_INFO, sdev, "Successfully cancelled outstanding commands\n");
|
||||
|
|
Loading…
Reference in a new issue