]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: fix handle_simple_lock on LOCK replica
authorSage Weil <sage@newdream.net>
Wed, 13 Jul 2011 21:01:16 +0000 (14:01 -0700)
committerSage Weil <sage@newdream.net>
Wed, 13 Jul 2011 21:57:57 +0000 (14:57 -0700)
We were ignoring caps.  To avoid this kind of mistake, use eval_gather(),
like handle_file_lock() does.

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

index a39c3c194252521a27d0b0dc2e528454e392f760..5721e1dc1743d88474935718a15e7c9da6e2e30f 100644 (file)
@@ -3062,21 +3062,8 @@ void Locker::handle_simple_lock(SimpleLock *lock, MLock *m)
     
   case LOCK_AC_LOCK:
     assert(lock->get_state() == LOCK_SYNC);
-    //||           lock->get_state() == LOCK_SYNC_LOCK);
-    
-    // wait for readers to finish?
-    if (lock->is_rdlocked() ||
-       lock->get_num_client_lease()) {
-      dout(7) << "handle_simple_lock has reader|leases, waiting before ack on " << *lock
-             << " on " << *lock->get_parent() << dendl;
-      if (lock->get_num_client_lease())
-       revoke_client_leases(lock);
-      lock->set_state(LOCK_SYNC_LOCK);
-    } else {
-      // update lock and reply
-      lock->set_state(LOCK_LOCK);
-      mds->send_message(new MLock(lock, LOCK_AC_LOCKACK, mds->get_nodeid()), m->get_connection());
-    }
+    lock->set_state(LOCK_SYNC_LOCK);
+    eval_gather(lock, true);
     break;