aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/ibmvscsi/ibmvfc.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c
index 134a0ae85bb7..4f73daccc9f1 100644
--- a/drivers/scsi/ibmvscsi/ibmvfc.c
+++ b/drivers/scsi/ibmvscsi/ibmvfc.c
@@ -2242,6 +2242,21 @@ static int ibmvfc_match_key(struct ibmvfc_event *evt, void *key)
2242} 2242}
2243 2243
2244/** 2244/**
2245 * ibmvfc_match_evt - Match function for specified event
2246 * @evt: ibmvfc event struct
2247 * @match: event to match
2248 *
2249 * Returns:
2250 * 1 if event matches key / 0 if event does not match key
2251 **/
2252static int ibmvfc_match_evt(struct ibmvfc_event *evt, void *match)
2253{
2254 if (evt == match)
2255 return 1;
2256 return 0;
2257}
2258
2259/**
2245 * ibmvfc_abort_task_set - Abort outstanding commands to the device 2260 * ibmvfc_abort_task_set - Abort outstanding commands to the device
2246 * @sdev: scsi device to abort commands 2261 * @sdev: scsi device to abort commands
2247 * 2262 *
@@ -2322,7 +2337,20 @@ static int ibmvfc_abort_task_set(struct scsi_device *sdev)
2322 if (rc) { 2337 if (rc) {
2323 sdev_printk(KERN_INFO, sdev, "Cancel failed, resetting host\n"); 2338 sdev_printk(KERN_INFO, sdev, "Cancel failed, resetting host\n");
2324 ibmvfc_reset_host(vhost); 2339 ibmvfc_reset_host(vhost);
2325 rsp_rc = 0; 2340 rsp_rc = -EIO;
2341 rc = ibmvfc_wait_for_ops(vhost, sdev->hostdata, ibmvfc_match_key);
2342
2343 if (rc == SUCCESS)
2344 rsp_rc = 0;
2345
2346 rc = ibmvfc_wait_for_ops(vhost, evt, ibmvfc_match_evt);
2347 if (rc != SUCCESS) {
2348 spin_lock_irqsave(vhost->host->host_lock, flags);
2349 ibmvfc_hard_reset_host(vhost);
2350 spin_unlock_irqrestore(vhost->host->host_lock, flags);
2351 rsp_rc = 0;
2352 }
2353
2326 goto out; 2354 goto out;
2327 } 2355 }
2328 } 2356 }