aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/dlm/rcom.c6
-rw-r--r--fs/dlm/recover.c4
2 files changed, 10 insertions, 0 deletions
diff --git a/fs/dlm/rcom.c b/fs/dlm/rcom.c
index f3f5e72a29ba..4ff061de927e 100644
--- a/fs/dlm/rcom.c
+++ b/fs/dlm/rcom.c
@@ -155,6 +155,7 @@ int dlm_rcom_status(struct dlm_ls *ls, int nodeid, uint32_t status_flags)
155 goto out; 155 goto out;
156 } 156 }
157 157
158retry:
158 error = create_rcom(ls, nodeid, DLM_RCOM_STATUS, 159 error = create_rcom(ls, nodeid, DLM_RCOM_STATUS,
159 sizeof(struct rcom_status), &rc, &mh); 160 sizeof(struct rcom_status), &rc, &mh);
160 if (error) 161 if (error)
@@ -169,6 +170,8 @@ int dlm_rcom_status(struct dlm_ls *ls, int nodeid, uint32_t status_flags)
169 170
170 error = dlm_wait_function(ls, &rcom_response); 171 error = dlm_wait_function(ls, &rcom_response);
171 disallow_sync_reply(ls); 172 disallow_sync_reply(ls);
173 if (error == -ETIMEDOUT)
174 goto retry;
172 if (error) 175 if (error)
173 goto out; 176 goto out;
174 177
@@ -276,6 +279,7 @@ int dlm_rcom_names(struct dlm_ls *ls, int nodeid, char *last_name, int last_len)
276 279
277 ls->ls_recover_nodeid = nodeid; 280 ls->ls_recover_nodeid = nodeid;
278 281
282retry:
279 error = create_rcom(ls, nodeid, DLM_RCOM_NAMES, last_len, &rc, &mh); 283 error = create_rcom(ls, nodeid, DLM_RCOM_NAMES, last_len, &rc, &mh);
280 if (error) 284 if (error)
281 goto out; 285 goto out;
@@ -288,6 +292,8 @@ int dlm_rcom_names(struct dlm_ls *ls, int nodeid, char *last_name, int last_len)
288 292
289 error = dlm_wait_function(ls, &rcom_response); 293 error = dlm_wait_function(ls, &rcom_response);
290 disallow_sync_reply(ls); 294 disallow_sync_reply(ls);
295 if (error == -ETIMEDOUT)
296 goto retry;
291 out: 297 out:
292 return error; 298 return error;
293} 299}
diff --git a/fs/dlm/recover.c b/fs/dlm/recover.c
index eaea789bf97d..ce2aa54ca2e2 100644
--- a/fs/dlm/recover.c
+++ b/fs/dlm/recover.c
@@ -52,6 +52,10 @@ int dlm_wait_function(struct dlm_ls *ls, int (*testfn) (struct dlm_ls *ls))
52 dlm_config.ci_recover_timer * HZ); 52 dlm_config.ci_recover_timer * HZ);
53 if (rv) 53 if (rv)
54 break; 54 break;
55 if (test_bit(LSFL_RCOM_WAIT, &ls->ls_flags)) {
56 log_debug(ls, "dlm_wait_function timed out");
57 return -ETIMEDOUT;
58 }
55 } 59 }
56 60
57 if (dlm_recovery_stopped(ls)) { 61 if (dlm_recovery_stopped(ls)) {