aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/ibmvscsi/ibmvfc.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/ibmvscsi/ibmvfc.c')
-rw-r--r--drivers/scsi/ibmvscsi/ibmvfc.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c
index 4e31caa21ddf..23f5ba5e6472 100644
--- a/drivers/scsi/ibmvscsi/ibmvfc.c
+++ b/drivers/scsi/ibmvscsi/ibmvfc.c
@@ -2208,7 +2208,10 @@ static int ibmvfc_cancel_all(struct scsi_device *sdev, int type)
2208 2208
2209 if (rsp_rc != 0) { 2209 if (rsp_rc != 0) {
2210 sdev_printk(KERN_ERR, sdev, "Failed to send cancel event. rc=%d\n", rsp_rc); 2210 sdev_printk(KERN_ERR, sdev, "Failed to send cancel event. rc=%d\n", rsp_rc);
2211 return -EIO; 2211 /* If failure is received, the host adapter is most likely going
2212 through reset, return success so the caller will wait for the command
2213 being cancelled to get returned */
2214 return 0;
2212 } 2215 }
2213 2216
2214 sdev_printk(KERN_INFO, sdev, "Cancelling outstanding commands.\n"); 2217 sdev_printk(KERN_INFO, sdev, "Cancelling outstanding commands.\n");
@@ -2221,7 +2224,15 @@ static int ibmvfc_cancel_all(struct scsi_device *sdev, int type)
2221 2224
2222 if (status != IBMVFC_MAD_SUCCESS) { 2225 if (status != IBMVFC_MAD_SUCCESS) {
2223 sdev_printk(KERN_WARNING, sdev, "Cancel failed with rc=%x\n", status); 2226 sdev_printk(KERN_WARNING, sdev, "Cancel failed with rc=%x\n", status);
2224 return -EIO; 2227 switch (status) {
2228 case IBMVFC_MAD_DRIVER_FAILED:
2229 case IBMVFC_MAD_CRQ_ERROR:
2230 /* Host adapter most likely going through reset, return success to
2231 the caller will wait for the command being cancelled to get returned */
2232 return 0;
2233 default:
2234 return -EIO;
2235 };
2225 } 2236 }
2226 2237
2227 sdev_printk(KERN_INFO, sdev, "Successfully cancelled outstanding commands\n"); 2238 sdev_printk(KERN_INFO, sdev, "Successfully cancelled outstanding commands\n");