]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: add SYNC_MIX2 state
authorSage Weil <sage@newdream.net>
Thu, 12 Mar 2009 18:59:25 +0000 (11:59 -0700)
committerSage Weil <sage@newdream.net>
Thu, 12 Mar 2009 21:20:06 +0000 (14:20 -0700)
After replica releases RDCACHE back to mds, it still needs to wait
before moving to MIX state.

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

index d36f1af01d28e145f7737d7ee7bc30b4336829fb..c6087f049568047457839c36329efd19445a438d 100644 (file)
@@ -3192,8 +3192,10 @@ void Locker::handle_file_lock(ScatterLock *lock, MLock *m)
   }
 
 
-  dout(7) << "handle_file_lock a=" << m->get_action() << " from " << from << " " 
-         << *in << " filelock=" << *lock << dendl;  
+  dout(7) << "handle_file_lock a=" << get_lock_action_name(m->get_action())
+         << " on " << *lock
+         << " from mds" << from << " " 
+         << *in << dendl;
   
   switch (m->get_action()) {
     // -- replica --
@@ -3260,7 +3262,8 @@ void Locker::handle_file_lock(ScatterLock *lock, MLock *m)
     
   case LOCK_AC_MIXED:
     assert(lock->get_state() == LOCK_SYNC ||
-           lock->get_state() == LOCK_LOCK);
+           lock->get_state() == LOCK_LOCK ||
+          lock->get_state() == LOCK_SYNC_MIX2);
     
     if (lock->get_state() == LOCK_SYNC) {
       // MIXED
@@ -3274,7 +3277,7 @@ void Locker::handle_file_lock(ScatterLock *lock, MLock *m)
         break;
       }
       
-      lock->set_state(LOCK_MIX);
+      lock->set_state(LOCK_SYNC_MIX2);
       
       // ack
       MLock *reply = new MLock(lock, LOCK_AC_MIXEDACK, mds->get_nodeid());
index 367deca179dc47a05484cf51f70bfea2be8c019c..3819423f4d656b18729b24b6bca6c1d9204bebd1 100644 (file)
@@ -61,7 +61,8 @@ public:
     case LOCK_SYNC_EXCL: return "sync->excl";
     case LOCK_LOCK_EXCL: return "lock->excl";      
 
-    case LOCK_SYNC_MIX: return "sync->scatter";
+    case LOCK_SYNC_MIX: return "sync->mix";
+    case LOCK_SYNC_MIX2: return "sync->mix(2)";
     case LOCK_LOCK_TSYN: return "lock->tsyn";
       
     case LOCK_MIX_LOCK: return "mix->lock";
@@ -73,7 +74,7 @@ public:
     case LOCK_TSYN: return "tsyn";
 
     case LOCK_MIX_SYNC: return "mix->sync";
-    case LOCK_MIX_SYNC2: return "mix->sync2";
+    case LOCK_MIX_SYNC2: return "mix->sync(2)";
     case LOCK_EXCL_MIX: return "excl->mix";
     case LOCK_MIX_EXCL: return "mix->excl";
 
index 4106f5c2b95932328eef1ea9a973955f61957002..929e7bce08dd5439ff6ad1c94e4868361a3191af 100644 (file)
@@ -93,6 +93,7 @@ struct sm_state_t filelock[30] = {
 
     [LOCK_MIX]       = { 0,         false, LOCK_MIX,  0,    0,   FW,  ANY, 0,   0,   CEPH_CAP_GRD|CEPH_CAP_GWR,0,CEPH_CAP_GRD },
     [LOCK_SYNC_MIX]  = { LOCK_MIX,  false, LOCK_MIX,  ANY,  0,   0,   0,   0,   0,   CEPH_CAP_GRD,0,CEPH_CAP_GRD },
+    [LOCK_SYNC_MIX2] = { LOCK_MIX,  false, 0,         ANY,  0,   0,   0,   0,   0,   CEPH_CAP_GRD,0,CEPH_CAP_GRD },
     [LOCK_EXCL_MIX]  = { LOCK_MIX,  true,  LOCK_LOCK, 0,    0,   0,   XCL, 0,   0,   0,CEPH_CAP_GRD|CEPH_CAP_GWR,0 },
     
     [LOCK_EXCL]      = { 0,         true,  LOCK_LOCK, 0,    0,   FW,  0,   0,   0,   0,CEPH_CAP_GRDCACHE|CEPH_CAP_GEXCL|CEPH_CAP_GRD|CEPH_CAP_GWR|CEPH_CAP_GWRBUFFER,0 },
index f231a61cfc0b6f64a706ce5cda94d477bbd5018e..0af00b9f2546bc8c844c7a7251a51b93386ad616 100644 (file)
@@ -64,18 +64,19 @@ extern struct sm_t sm_scatterlock;
 
 #define LOCK_MIX      14
 #define LOCK_SYNC_MIX 15
-#define LOCK_LOCK_MIX 16
-#define LOCK_EXCL_MIX 17
-#define LOCK_MIX_SYNC 18
-#define LOCK_MIX_SYNC2 19
-#define LOCK_MIX_LOCK 20
-#define LOCK_MIX_EXCL 21
-
-#define LOCK_TSYN      22
-#define LOCK_TSYN_LOCK 23
-#define LOCK_TSYN_MIX  24
-#define LOCK_LOCK_TSYN 25
-#define LOCK_MIX_TSYN  26
+#define LOCK_SYNC_MIX2 16
+#define LOCK_LOCK_MIX 17
+#define LOCK_EXCL_MIX 18
+#define LOCK_MIX_SYNC 19
+#define LOCK_MIX_SYNC2 20
+#define LOCK_MIX_LOCK 21
+#define LOCK_MIX_EXCL 22
+
+#define LOCK_TSYN      23
+#define LOCK_TSYN_LOCK 24
+#define LOCK_TSYN_MIX  25
+#define LOCK_LOCK_TSYN 26
+#define LOCK_MIX_TSYN  27
 
 
 #endif