diff options
| -rw-r--r-- | fs/ocfs2/dlm/dlmunlock.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/fs/ocfs2/dlm/dlmunlock.c b/fs/ocfs2/dlm/dlmunlock.c index 5698b52cf5c9..2e3c9dbab68c 100644 --- a/fs/ocfs2/dlm/dlmunlock.c +++ b/fs/ocfs2/dlm/dlmunlock.c | |||
| @@ -191,7 +191,9 @@ static enum dlm_status dlmunlock_common(struct dlm_ctxt *dlm, | |||
| 191 | DLM_UNLOCK_CLEAR_CONVERT_TYPE); | 191 | DLM_UNLOCK_CLEAR_CONVERT_TYPE); |
| 192 | } else if (status == DLM_RECOVERING || | 192 | } else if (status == DLM_RECOVERING || |
| 193 | status == DLM_MIGRATING || | 193 | status == DLM_MIGRATING || |
| 194 | status == DLM_FORWARD) { | 194 | status == DLM_FORWARD || |
| 195 | status == DLM_NOLOCKMGR | ||
| 196 | ) { | ||
| 195 | /* must clear the actions because this unlock | 197 | /* must clear the actions because this unlock |
| 196 | * is about to be retried. cannot free or do | 198 | * is about to be retried. cannot free or do |
| 197 | * any list manipulation. */ | 199 | * any list manipulation. */ |
| @@ -200,7 +202,8 @@ static enum dlm_status dlmunlock_common(struct dlm_ctxt *dlm, | |||
| 200 | res->lockname.name, | 202 | res->lockname.name, |
| 201 | status==DLM_RECOVERING?"recovering": | 203 | status==DLM_RECOVERING?"recovering": |
| 202 | (status==DLM_MIGRATING?"migrating": | 204 | (status==DLM_MIGRATING?"migrating": |
| 203 | "forward")); | 205 | (status == DLM_FORWARD ? "forward" : |
| 206 | "nolockmanager"))); | ||
| 204 | actions = 0; | 207 | actions = 0; |
| 205 | } | 208 | } |
| 206 | if (flags & LKM_CANCEL) | 209 | if (flags & LKM_CANCEL) |
| @@ -364,7 +367,10 @@ static enum dlm_status dlm_send_remote_unlock_request(struct dlm_ctxt *dlm, | |||
| 364 | * updated state to the recovery master. this thread | 367 | * updated state to the recovery master. this thread |
| 365 | * just needs to finish out the operation and call | 368 | * just needs to finish out the operation and call |
| 366 | * the unlockast. */ | 369 | * the unlockast. */ |
| 367 | ret = DLM_NORMAL; | 370 | if (dlm_is_node_dead(dlm, owner)) |
| 371 | ret = DLM_NORMAL; | ||
| 372 | else | ||
| 373 | ret = DLM_NOLOCKMGR; | ||
| 368 | } else { | 374 | } else { |
| 369 | /* something bad. this will BUG in ocfs2 */ | 375 | /* something bad. this will BUG in ocfs2 */ |
| 370 | ret = dlm_err_to_dlm_status(tmpret); | 376 | ret = dlm_err_to_dlm_status(tmpret); |
| @@ -638,7 +644,9 @@ retry: | |||
| 638 | 644 | ||
| 639 | if (status == DLM_RECOVERING || | 645 | if (status == DLM_RECOVERING || |
| 640 | status == DLM_MIGRATING || | 646 | status == DLM_MIGRATING || |
| 641 | status == DLM_FORWARD) { | 647 | status == DLM_FORWARD || |
| 648 | status == DLM_NOLOCKMGR) { | ||
| 649 | |||
| 642 | /* We want to go away for a tiny bit to allow recovery | 650 | /* We want to go away for a tiny bit to allow recovery |
| 643 | * / migration to complete on this resource. I don't | 651 | * / migration to complete on this resource. I don't |
| 644 | * know of any wait queue we could sleep on as this | 652 | * know of any wait queue we could sleep on as this |
| @@ -650,7 +658,7 @@ retry: | |||
| 650 | msleep(50); | 658 | msleep(50); |
| 651 | 659 | ||
| 652 | mlog(0, "retrying unlock due to pending recovery/" | 660 | mlog(0, "retrying unlock due to pending recovery/" |
| 653 | "migration/in-progress\n"); | 661 | "migration/in-progress/reconnect\n"); |
| 654 | goto retry; | 662 | goto retry; |
| 655 | } | 663 | } |
| 656 | 664 | ||
