struct ibmvfc_target *tgt;
 
        if (vhost->action == IBMVFC_HOST_ACTION_INIT_WAIT) {
-               if (++vhost->init_retries > IBMVFC_MAX_INIT_RETRIES) {
+               if (++vhost->init_retries > IBMVFC_MAX_HOST_INIT_RETRIES) {
                        dev_err(vhost->dev,
                                "Host initialization retries exceeded. Taking adapter offline\n");
                        ibmvfc_link_down(vhost, IBMVFC_HOST_OFFLINE);
 static void ibmvfc_retry_host_init(struct ibmvfc_host *vhost)
 {
        if (vhost->action == IBMVFC_HOST_ACTION_INIT_WAIT) {
-               if (++vhost->init_retries > IBMVFC_MAX_INIT_RETRIES) {
+               vhost->delay_init = 1;
+               if (++vhost->init_retries > IBMVFC_MAX_HOST_INIT_RETRIES) {
                        dev_err(vhost->dev,
                                "Host initialization retries exceeded. Taking adapter offline\n");
                        ibmvfc_link_down(vhost, IBMVFC_HOST_OFFLINE);
-               } else if (vhost->init_retries == IBMVFC_MAX_INIT_RETRIES)
+               } else if (vhost->init_retries == IBMVFC_MAX_HOST_INIT_RETRIES)
                        __ibmvfc_reset_host(vhost);
                else
                        ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_INIT);
 static void ibmvfc_retry_tgt_init(struct ibmvfc_target *tgt,
                                  void (*job_step) (struct ibmvfc_target *))
 {
-       if (++tgt->init_retries > IBMVFC_MAX_INIT_RETRIES) {
+       if (++tgt->init_retries > IBMVFC_MAX_TGT_INIT_RETRIES) {
                ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT);
                wake_up(&tgt->vhost->work_wait_q);
        } else
                break;
        case IBMVFC_HOST_ACTION_INIT:
                BUG_ON(vhost->state != IBMVFC_INITIALIZING);
-               vhost->job_step(vhost);
+               if (vhost->delay_init) {
+                       vhost->delay_init = 0;
+                       spin_unlock_irqrestore(vhost->host->host_lock, flags);
+                       ssleep(5);
+                       return;
+               } else
+                       vhost->job_step(vhost);
                break;
        case IBMVFC_HOST_ACTION_QUERY:
                list_for_each_entry(tgt, &vhost->targets, queue)
 
 #define IBMVFC_MAX_DISC_THREADS        4
 #define IBMVFC_TGT_MEMPOOL_SZ          64
 #define IBMVFC_MAX_CMDS_PER_LUN        64
-#define IBMVFC_MAX_INIT_RETRIES        3
+#define IBMVFC_MAX_HOST_INIT_RETRIES   6
+#define IBMVFC_MAX_TGT_INIT_RETRIES            3
 #define IBMVFC_DEV_LOSS_TMO            (5 * 60)
 #define IBMVFC_DEFAULT_LOG_LEVEL       2
 #define IBMVFC_MAX_CDB_LEN             16
        int discovery_threads;
        int client_migrated;
        int reinit;
+       int delay_init;
        int events_to_log;
 #define IBMVFC_AE_LINKUP       0x0001
 #define IBMVFC_AE_LINKDOWN     0x0002