diff options
-rw-r--r-- | fs/dlm/rcom.c | 6 | ||||
-rw-r--r-- | fs/dlm/recover.c | 4 |
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 | ||
158 | retry: | ||
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 | ||
282 | retry: | ||
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)) { |