]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: drop rdlocks after early reply is sent
authorSage Weil <sage@newdream.net>
Mon, 19 Jan 2009 23:05:57 +0000 (15:05 -0800)
committerSage Weil <sage@newdream.net>
Mon, 19 Jan 2009 23:05:57 +0000 (15:05 -0800)
We will still hold wrlocks and xlocks until journal entry commits.

src/TODO
src/mds/Locker.cc
src/mds/Locker.h
src/mds/Server.cc

index 5a1ef9307f55628ae94e5a1f840d0ab26858fa30..9385db8fec5dd1dc6697a8cc1fe9f8ff78220c2e 100644 (file)
--- a/src/TODO
+++ b/src/TODO
@@ -6,7 +6,7 @@ v0.6
 
 v0.7
 - ENOSPC
-- async metadata ops
+- fully async file creation
 
 v0.8
 - cas?
@@ -40,7 +40,6 @@ repair
       on cdir store is sufficient if mdlog survives...
   - or what the hell, full trace?
 - mds scrubbing
-/- rados scrubbing
 
 
 timer
index a7ac68901e8c376b406dd5c83a817af6dc84597b..8556b2b52093fcf2a6e1708a7d041ff41040ab85 100644 (file)
@@ -366,6 +366,12 @@ void Locker::drop_locks(Mutation *mut)
     wrlock_finish(*mut->wrlocks.begin(), mut);
 }
 
+void Locker::drop_rdlocks(Mutation *mut)
+{
+  while (!mut->rdlocks.empty()) 
+    rdlock_finish(*mut->rdlocks.begin(), mut);
+}
+
 
 // generics
 
index 7449934472cfa990816ec5a6101d3d329b24e29b..84a27104707cc65091ce4c8494131b7db163cbcd 100644 (file)
@@ -83,6 +83,7 @@ public:
 
   void drop_locks(Mutation *mut);
   void set_xlocks_done(Mutation *mut);
+  void drop_rdlocks(Mutation *mut);
 
   void eval_gather(SimpleLock *lock);
   void eval_cap_gather(CInode *in);
index 7bb850bec7cb87901dd2e6d9de6e4d1eeca1455b..aed71d1f13cdf1001f59acc3924bf49cec014407 100644 (file)
@@ -554,6 +554,7 @@ void Server::early_reply(MDRequest *mdr, CInode *tracei, CDentry *tracedn)
 
   // mark xlocks "done", indicating that we are exposing uncommitted changes
   mds->locker->set_xlocks_done(mdr);
+  mds->locker->drop_rdlocks(mdr);
 
   mdr->did_early_reply = true;
 }