goto out;
        }
 
+retry:
        error = create_rcom(ls, nodeid, DLM_RCOM_STATUS,
                            sizeof(struct rcom_status), &rc, &mh);
        if (error)
 
        error = dlm_wait_function(ls, &rcom_response);
        disallow_sync_reply(ls);
+       if (error == -ETIMEDOUT)
+               goto retry;
        if (error)
                goto out;
 
 
        ls->ls_recover_nodeid = nodeid;
 
+retry:
        error = create_rcom(ls, nodeid, DLM_RCOM_NAMES, last_len, &rc, &mh);
        if (error)
                goto out;
 
        error = dlm_wait_function(ls, &rcom_response);
        disallow_sync_reply(ls);
+       if (error == -ETIMEDOUT)
+               goto retry;
  out:
        return error;
 }
 
                                        dlm_config.ci_recover_timer * HZ);
                if (rv)
                        break;
+               if (test_bit(LSFL_RCOM_WAIT, &ls->ls_flags)) {
+                       log_debug(ls, "dlm_wait_function timed out");
+                       return -ETIMEDOUT;
+               }
        }
 
        if (dlm_recovery_stopped(ls)) {