From ba0a9d1631f0ad110861e1482ab996d9f6c0794f Mon Sep 17 00:00:00 2001 From: David Teigland Date: Wed, 13 Dec 2006 10:36:37 -0600 Subject: [PATCH] --- yaml --- r: 46269 b: refs/heads/master c: dc200a8848cca8b0e99012996c66f4b379a390ed h: refs/heads/master i: 46267: e08d0f98fbdedf09c2e6f99a40995753ef024254 v: v3 --- [refs] | 2 +- trunk/fs/dlm/lock.c | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 25039de6eb4b..99778e8a3242 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c378051177dce4421428fd1691ffdf15ad57c161 +refs/heads/master: dc200a8848cca8b0e99012996c66f4b379a390ed diff --git a/trunk/fs/dlm/lock.c b/trunk/fs/dlm/lock.c index 30878defaeb6..69ada5887078 100644 --- a/trunk/fs/dlm/lock.c +++ b/trunk/fs/dlm/lock.c @@ -3571,6 +3571,14 @@ int dlm_recover_process_copy(struct dlm_ls *ls, struct dlm_rcom *rc) lock_rsb(r); switch (error) { + case -EBADR: + /* There's a chance the new master received our lock before + dlm_recover_master_reply(), this wouldn't happen if we did + a barrier between recover_masters and recover_locks. */ + log_debug(ls, "master copy not ready %x r %lx %s", lkb->lkb_id, + (unsigned long)r, r->res_name); + dlm_send_rcom_lock(r, lkb); + goto out; case -EEXIST: log_debug(ls, "master copy exists %x", lkb->lkb_id); /* fall through */ @@ -3585,7 +3593,7 @@ int dlm_recover_process_copy(struct dlm_ls *ls, struct dlm_rcom *rc) /* an ack for dlm_recover_locks() which waits for replies from all the locks it sends to new masters */ dlm_recovered_lock(r); - + out: unlock_rsb(r); put_rsb(r); dlm_put_lkb(lkb);