]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: _finish_xlock helper
authorSage Weil <sage@newdream.net>
Thu, 1 Sep 2011 23:28:42 +0000 (16:28 -0700)
committerSage Weil <sage@newdream.net>
Wed, 7 Sep 2011 15:44:59 +0000 (08:44 -0700)
Factor out _finish_xlock helper to move from XLOCKDONE (or, later,
PREXLOCK) to a non-xlock state.

Signed-off-by: Sage Weil <sage@newdream.net>
src/mds/Locker.cc
src/mds/Locker.h

index 5ee3ff3a3ba68d6ff6002ebe4a67cd8fe9add762..66fea23493c7e4d376a1340dbe91e8b36dbe6c1d 100644 (file)
@@ -1347,6 +1347,18 @@ bool Locker::xlock_start(SimpleLock *lock, MDRequest *mut)
   }
 }
 
+void Locker::_finish_xlock(SimpleLock *lock, bool *pneed_issue)
+{
+  assert(!lock->is_stable());
+  lock->get_parent()->auth_unpin(lock);
+  if (lock->get_type() != CEPH_LOCK_DN && ((CInode*)lock->get_parent())->get_loner() >= 0)
+    lock->set_state(LOCK_EXCL);
+  else
+    lock->set_state(LOCK_LOCK);
+  if (lock->get_cap_shift())
+    *pneed_issue = true;
+}
+
 void Locker::xlock_finish(SimpleLock *lock, Mutation *mut, bool *pneed_issue)
 {
   if (lock->get_type() == CEPH_LOCK_IVERSION ||
@@ -1386,14 +1398,7 @@ void Locker::xlock_finish(SimpleLock *lock, Mutation *mut, bool *pneed_issue)
        lock->get_num_rdlocks() == 0 &&
        lock->get_num_wrlocks() == 0 &&
        lock->get_num_client_lease() == 0) {
-      assert(!lock->is_stable());
-      lock->get_parent()->auth_unpin(lock);
-      if (lock->get_type() != CEPH_LOCK_DN && ((CInode*)lock->get_parent())->get_loner() >= 0)
-       lock->set_state(LOCK_EXCL);
-      else
-       lock->set_state(LOCK_LOCK);
-      if (lock->get_cap_shift())
-       do_issue = true;
+      _finish_xlock(lock, &do_issue);
     }
 
     // others waiting?
index 4987094fead6de015a7da514097ac8009939c2a7..35de701cdef8e97dcfaa0cb5f8a7a9136b8dd87b 100644 (file)
@@ -141,6 +141,7 @@ public:
   void remote_wrlock_finish(SimpleLock *lock, int target, Mutation *mut);
 
   bool xlock_start(SimpleLock *lock, MDRequest *mut);
+  void _finish_xlock(SimpleLock *lock, bool *pneed_issue);
   void xlock_finish(SimpleLock *lock, Mutation *mut, bool *pneed_issue);
 
   void xlock_export(SimpleLock *lock, Mutation *mut);