case IBMVFC_HOST_ACTION_INIT:
        case IBMVFC_HOST_ACTION_TGT_DEL:
        case IBMVFC_HOST_ACTION_QUERY_TGTS:
+       case IBMVFC_HOST_ACTION_TGT_DEL_FAILED:
        case IBMVFC_HOST_ACTION_TGT_ADD:
        case IBMVFC_HOST_ACTION_NONE:
        default:
                        rsp->status, rsp->error, status);
                if (ibmvfc_retry_cmd(rsp->status, rsp->error))
                        ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_prli);
+               else
+                       ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT);
                break;
        };
 
 
                if (ibmvfc_retry_cmd(rsp->status, rsp->error))
                        ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_send_plogi);
+               else
+                       ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT);
                break;
        };
 
                        ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT);
                else if (ibmvfc_retry_cmd(rsp->status, rsp->error))
                        ibmvfc_retry_tgt_init(tgt, ibmvfc_tgt_query_target);
+               else
+                       ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT);
                break;
        };
 
        case IBMVFC_HOST_ACTION_ALLOC_TGTS:
        case IBMVFC_HOST_ACTION_TGT_ADD:
        case IBMVFC_HOST_ACTION_TGT_DEL:
+       case IBMVFC_HOST_ACTION_TGT_DEL_FAILED:
        case IBMVFC_HOST_ACTION_QUERY:
        default:
                break;
                        ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_TGT_DEL);
                break;
        case IBMVFC_HOST_ACTION_TGT_DEL:
+       case IBMVFC_HOST_ACTION_TGT_DEL_FAILED:
                list_for_each_entry(tgt, &vhost->targets, queue) {
                        if (tgt->action == IBMVFC_TGT_ACTION_DEL_RPORT) {
                                tgt_dbg(tgt, "Deleting rport\n");
                }
 
                if (vhost->state == IBMVFC_INITIALIZING) {
-                       ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_INIT);
-                       vhost->job_step = ibmvfc_discover_targets;
+                       if (vhost->action == IBMVFC_HOST_ACTION_TGT_DEL_FAILED) {
+                               ibmvfc_set_host_state(vhost, IBMVFC_ACTIVE);
+                               ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_TGT_ADD);
+                               vhost->init_retries = 0;
+                               spin_unlock_irqrestore(vhost->host->host_lock, flags);
+                               scsi_unblock_requests(vhost->host);
+                               return;
+                       } else {
+                               ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_INIT);
+                               vhost->job_step = ibmvfc_discover_targets;
+                       }
                } else {
                        ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_NONE);
                        spin_unlock_irqrestore(vhost->host->host_lock, flags);
                        }
                }
 
-               if (!ibmvfc_dev_init_to_do(vhost)) {
-                       ibmvfc_set_host_state(vhost, IBMVFC_ACTIVE);
-                       ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_TGT_ADD);
-                       vhost->init_retries = 0;
-                       spin_unlock_irqrestore(vhost->host->host_lock, flags);
-                       scsi_unblock_requests(vhost->host);
-                       return;
-               }
+               if (!ibmvfc_dev_init_to_do(vhost))
+                       ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_TGT_DEL_FAILED);
                break;
        case IBMVFC_HOST_ACTION_TGT_ADD:
                list_for_each_entry(tgt, &vhost->targets, queue) {
                                spin_unlock_irqrestore(vhost->host->host_lock, flags);
                                ibmvfc_tgt_add_rport(tgt);
                                return;
-                       } else if (tgt->action == IBMVFC_TGT_ACTION_DEL_RPORT) {
-                               tgt_dbg(tgt, "Deleting rport\n");
-                               rport = tgt->rport;
-                               tgt->rport = NULL;
-                               list_del(&tgt->queue);
-                               spin_unlock_irqrestore(vhost->host->host_lock, flags);
-                               if (rport)
-                                       fc_remote_port_delete(rport);
-                               kref_put(&tgt->kref, ibmvfc_release_tgt);
-                               return;
                        }
                }