diff options
Diffstat (limited to 'drivers/scsi/ibmvscsi/ibmvfc.c')
-rw-r--r-- | drivers/scsi/ibmvscsi/ibmvfc.c | 15 |
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"); |