]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: fix file_excl assert
authorSage Weil <sage@newdream.net>
Tue, 5 Jul 2011 15:58:26 +0000 (08:58 -0700)
committerSage Weil <sage@newdream.net>
Tue, 5 Jul 2011 15:58:26 +0000 (08:58 -0700)
If we are in XSYN state and want to move to anything else, we must go via
EXCL, but we may not be loner anymore.  Weaken the file_excl() assert so we
don't crash.

Reported-by: Fyodor Ustinov <ufm@ufm.su>
Signed-off-by: Sage Weil <sage@newdream.net>
src/mds/Locker.cc

index a87edb10563ff2bc784418136d6024e5f25771b2..27fa20d3df296ca224aba83c6970883d75da5a60 100644 (file)
@@ -3979,7 +3979,8 @@ void Locker::file_excl(ScatterLock *lock, bool *need_issue)
   assert(in->is_auth());
   assert(lock->is_stable());
 
-  assert(in->get_loner() >= 0 && in->mds_caps_wanted.empty());
+  assert((in->get_loner() >= 0 && in->mds_caps_wanted.empty()) ||
+        (lock->get_state() == LOCK_XSYN));  // must do xsyn -> excl -> <anything else>
   
   switch (lock->get_state()) {
   case LOCK_SYNC: lock->set_state(LOCK_SYNC_EXCL); break;