From 63d551448f1ab432808be592419cf68dee615944 Mon Sep 17 00:00:00 2001 From: David Teigland Date: Wed, 9 Jan 2008 10:37:39 -0600 Subject: [PATCH] --- yaml --- r: 80615 b: refs/heads/master c: 755b5eb8bac90b35dc901465a06081aaad94e9ae h: refs/heads/master i: 80613: 32b5590df241b62bd5f4a1389da7e59b0285bb92 80611: 45f78203638790198f3613a0c965c76109d5e703 80607: e7277ed889aaa3b831144d3e023bdcc067e35edb v: v3 --- [refs] | 2 +- trunk/fs/dlm/lock.c | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 7d93c37b2073..58b21ee85bbd 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 42dc1601a9a31e8da767a4a9c37bad844b3698ab +refs/heads/master: 755b5eb8bac90b35dc901465a06081aaad94e9ae diff --git a/trunk/fs/dlm/lock.c b/trunk/fs/dlm/lock.c index fa68e9b93651..bc2e4ba4c1be 100644 --- a/trunk/fs/dlm/lock.c +++ b/trunk/fs/dlm/lock.c @@ -1851,7 +1851,7 @@ static void send_blocking_asts_all(struct dlm_rsb *r, struct dlm_lkb *lkb) static int set_master(struct dlm_rsb *r, struct dlm_lkb *lkb) { struct dlm_ls *ls = r->res_ls; - int error, dir_nodeid, ret_nodeid, our_nodeid = dlm_our_nodeid(); + int i, error, dir_nodeid, ret_nodeid, our_nodeid = dlm_our_nodeid(); if (rsb_flag(r, RSB_MASTER_UNCERTAIN)) { rsb_clear_flag(r, RSB_MASTER_UNCERTAIN); @@ -1885,7 +1885,7 @@ static int set_master(struct dlm_rsb *r, struct dlm_lkb *lkb) return 1; } - for (;;) { + for (i = 0; i < 2; i++) { /* It's possible for dlm_scand to remove an old rsb for this same resource from the toss list, us to create a new one, look up the master locally, and find it @@ -1899,6 +1899,8 @@ static int set_master(struct dlm_rsb *r, struct dlm_lkb *lkb) log_debug(ls, "dir_lookup error %d %s", error, r->res_name); schedule(); } + if (error && error != -EEXIST) + return error; if (ret_nodeid == our_nodeid) { r->res_first_lkid = 0;