]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: no rdlock in filelock LOCK state
authorSage Weil <sage@newdream.net>
Thu, 14 May 2009 23:30:51 +0000 (16:30 -0700)
committerSage Weil <sage@newdream.net>
Thu, 14 May 2009 23:30:51 +0000 (16:30 -0700)
Otherwise we get wrlocks AND rdlocks at the same time, which is clearly
problematic.  Der.

Also fix _rdlock_kick to not simple_lock, since that won't help us.

src/mds/Locker.cc
src/mds/locks.c

index 3fae38eefc4490ef4bf874e053e445893e8885c2..37c3aaaf54d590141a542102b882b44d04730846 100644 (file)
@@ -667,9 +667,7 @@ bool Locker::_rdlock_kick(SimpleLock *lock)
        scatter_tempsync((ScatterLock*)lock);
       else
        simple_sync(lock);
-    } else if (lock->sm == &sm_filelock)
-      simple_lock(lock);
-    else
+    } else 
       simple_sync(lock);
     return true;
   }
index 4ad3d5b8ddc12f343d778afdf704a41ab97b48f4..cb84ec65cad99d1fea57c6263ef8b705f89a07ea 100644 (file)
@@ -85,7 +85,7 @@ struct sm_state_t filelock[30] = {
     [LOCK_MIX_SYNC]  = { LOCK_SYNC, false, LOCK_MIX,  0,    0,   0,   0,   0,   0,   CEPH_CAP_GRD,0,0,CEPH_CAP_GRD },
     [LOCK_MIX_SYNC2] = { LOCK_SYNC, false, 0,         0,    0,   0,   0,   0,   0,   CEPH_CAP_GRD,0,0,CEPH_CAP_GRD },
     
-    [LOCK_LOCK]      = { 0,         false, LOCK_LOCK, AUTH, 0,   AUTH,AUTH,0,   0,   CEPH_CAP_GCACHE|CEPH_CAP_GBUFFER,0,0,0 },
+    [LOCK_LOCK]      = { 0,         false, LOCK_LOCK, AUTH, 0,   0,   AUTH,0,   0,   CEPH_CAP_GCACHE|CEPH_CAP_GBUFFER,0,0,0 },
     [LOCK_SYNC_LOCK] = { LOCK_LOCK, false, LOCK_LOCK, AUTH, 0,   0,   0,   0,   0,   CEPH_CAP_GCACHE,0,0,CEPH_CAP_GCACHE },
     [LOCK_EXCL_LOCK] = { LOCK_LOCK, false, LOCK_LOCK, 0,    0,   0,   0,   0,   0,   CEPH_CAP_GCACHE|CEPH_CAP_GBUFFER,0,0,CEPH_CAP_GCACHE },
     [LOCK_MIX_LOCK]  = { LOCK_LOCK, false, LOCK_LOCK, AUTH, 0,   0,   0,   0,   0,   0,0,0,0 },