From d440a67412f385572edefae65c3b612ce562d710 Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Mon, 19 Sep 2011 09:48:13 -0700 Subject: [PATCH] flock: clean up waiting records of a lock when adding it succeeds Signed-off-by: Greg Farnum --- src/mds/flock.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/mds/flock.cc b/src/mds/flock.cc index cc3eeb615b013..a3cac9e46e4f0 100644 --- a/src/mds/flock.cc +++ b/src/mds/flock.cc @@ -33,6 +33,10 @@ void ceph_lock_state_t::remove_waiting(ceph_filelock& fl) p->second.pid == fl.pid && p->second.pid_namespace == fl.pid_namespace) { waiting_locks.erase(p); + --client_waiting_lock_counts[(client_t)fl.client]; + if (!client_waiting_lock_counts[(client_t)fl.client]) { + client_waiting_lock_counts.erase((client_t)fl.client); + } return; } ++p; @@ -81,8 +85,10 @@ bool ceph_lock_state_t::add_lock(ceph_filelock& new_lock, (new_lock.start, new_lock)); ret = true; } - if (ret) + if (ret) { ++client_held_lock_counts[(client_t)new_lock.client]; + remove_waiting(new_lock); + } else if (wait_on_fail && !replay) ++client_waiting_lock_counts[(client_t)new_lock.client]; return ret; -- 2.39.5