return 0;
 }
 
+/**
+ * ibmvfc_match_evt - Match function for specified event
+ * @evt:       ibmvfc event struct
+ * @match:     event to match
+ *
+ * Returns:
+ *     1 if event matches key / 0 if event does not match key
+ **/
+static int ibmvfc_match_evt(struct ibmvfc_event *evt, void *match)
+{
+       if (evt == match)
+               return 1;
+       return 0;
+}
+
 /**
  * ibmvfc_abort_task_set - Abort outstanding commands to the device
  * @sdev:      scsi device to abort commands
                if (rc) {
                        sdev_printk(KERN_INFO, sdev, "Cancel failed, resetting host\n");
                        ibmvfc_reset_host(vhost);
-                       rsp_rc = 0;
+                       rsp_rc = -EIO;
+                       rc = ibmvfc_wait_for_ops(vhost, sdev->hostdata, ibmvfc_match_key);
+
+                       if (rc == SUCCESS)
+                               rsp_rc = 0;
+
+                       rc = ibmvfc_wait_for_ops(vhost, evt, ibmvfc_match_evt);
+                       if (rc != SUCCESS) {
+                               spin_lock_irqsave(vhost->host->host_lock, flags);
+                               ibmvfc_hard_reset_host(vhost);
+                               spin_unlock_irqrestore(vhost->host->host_lock, flags);
+                               rsp_rc = 0;
+                       }
+
                        goto out;
                }
        }