]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: leave simplelock in EXCL if there is a loner
authorSage Weil <sage@newdream.net>
Tue, 31 Mar 2009 19:41:14 +0000 (12:41 -0700)
committerSage Weil <sage@newdream.net>
Tue, 31 Mar 2009 19:41:14 +0000 (12:41 -0700)
src/mds/Locker.cc

index be985b1af5f784c913d238a887bd45268fe4c604..57af31576e73f9288a40cad0073b6d2ef66146a7 100644 (file)
@@ -2155,10 +2155,16 @@ void Locker::simple_eval(SimpleLock *lock)
 
   if (lock->get_parent()->is_frozen()) return;
 
+  bool loner = false;
+  if (lock->get_type() != CEPH_LOCK_DN &&
+      ((CInode*)lock->get_parent())->get_loner() >= 0)
+    loner = true;
+
   // stable -> sync?
   if (!lock->is_xlocked() &&
       !lock->is_wrlocked() &&
       lock->get_state() != LOCK_SYNC &&
+      !(lock->get_state() == LOCK_EXCL && loner) &&
       !lock->is_waiter_for(SimpleLock::WAIT_WR)) {
     dout(7) << "simple_eval stable, syncing " << *lock 
            << " on " << *lock->get_parent() << dendl;