|
@@ -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");
|