From 2bbbb0d20a57e0d0490f01473b4e674e8317fbc9 Mon Sep 17 00:00:00 2001 From: David Teigland Date: Tue, 25 Jul 2006 13:59:48 -0500 Subject: [PATCH] --- yaml --- r: 38761 b: refs/heads/master c: 2b4e926aab7c854a536beee6ba8b9a78a9e00316 h: refs/heads/master i: 38759: a449d4f29704324fa5e6b6f631aa567c059f091c v: v3 --- [refs] | 2 +- trunk/fs/dlm/lock.c | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index ec8cdec81257..3a1780572e1d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f7da790d743d2f0b4f39e4fa442079b3b54f3bef +refs/heads/master: 2b4e926aab7c854a536beee6ba8b9a78a9e00316 diff --git a/trunk/fs/dlm/lock.c b/trunk/fs/dlm/lock.c index 227443218167..eaad28e51ec9 100644 --- a/trunk/fs/dlm/lock.c +++ b/trunk/fs/dlm/lock.c @@ -3366,12 +3366,16 @@ static struct dlm_rsb *find_purged_rsb(struct dlm_ls *ls, int bucket) void dlm_grant_after_purge(struct dlm_ls *ls) { struct dlm_rsb *r; - int i; + int bucket = 0; - for (i = 0; i < ls->ls_rsbtbl_size; i++) { - r = find_purged_rsb(ls, i); - if (!r) + while (1) { + r = find_purged_rsb(ls, bucket); + if (!r) { + if (bucket == ls->ls_rsbtbl_size - 1) + break; + bucket++; continue; + } lock_rsb(r); if (is_master(r)) { grant_pending_locks(r); @@ -3379,6 +3383,7 @@ void dlm_grant_after_purge(struct dlm_ls *ls) } unlock_rsb(r); put_rsb(r); + schedule(); } }