]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: refactor drop_*_locks() to use helpers
authorSage Weil <sage.weil@dreamhost.com>
Fri, 8 Jul 2011 16:47:34 +0000 (09:47 -0700)
committerSage Weil <sage.weil@dreamhost.com>
Fri, 8 Jul 2011 16:48:00 +0000 (09:48 -0700)
This slightly changes the unlock order for drop_locks() (rdlocks now
last instead of after xlocks, before [remote_]wrlocks).

Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
src/mds/Locker.cc
src/mds/Locker.h

index e6fff443c02941fb5c1508642f489fbc4d275678..6ffa819dc8d4457fc4a80949ad19cc7dd31f9aa5 100644 (file)
@@ -455,24 +455,23 @@ void Locker::set_xlocks_done(Mutation *mut)
   }
 }
 
-void Locker::drop_locks(Mutation *mut, set<CInode*> *pneed_issue)
+void Locker::_drop_rdlocks(Mutation *mut, set<CInode*> *pneed_issue)
 {
-  // leftover locks
-  set<CInode*> my_need_issue;
-  if (!pneed_issue)
-    pneed_issue = &my_need_issue;
-
-  while (!mut->xlocks.empty()) {
+  while (!mut->rdlocks.empty()) {
     bool ni = false;
-    MDSCacheObject *p = (*mut->xlocks.begin())->get_parent();
-    xlock_finish(*mut->xlocks.begin(), mut, &ni);
+    MDSCacheObject *p = (*mut->rdlocks.begin())->get_parent();
+    rdlock_finish(*mut->rdlocks.begin(), mut, &ni);
     if (ni)
       pneed_issue->insert((CInode*)p);
   }
-  while (!mut->rdlocks.empty()) {
+}
+
+void Locker::_drop_non_rdlocks(Mutation *mut, set<CInode*> *pneed_issue)
+{
+  while (!mut->xlocks.empty()) {
     bool ni = false;
-    MDSCacheObject *p = (*mut->rdlocks.begin())->get_parent();
-    rdlock_finish(*mut->rdlocks.begin(), mut, &ni);
+    MDSCacheObject *p = (*mut->xlocks.begin())->get_parent();
+    xlock_finish(*mut->xlocks.begin(), mut, &ni);
     if (ni)
       pneed_issue->insert((CInode*)p);
   }
@@ -486,6 +485,17 @@ void Locker::drop_locks(Mutation *mut, set<CInode*> *pneed_issue)
     if (ni)
       pneed_issue->insert((CInode*)p);
   }
+}
+
+void Locker::drop_locks(Mutation *mut, set<CInode*> *pneed_issue)
+{
+  // leftover locks
+  set<CInode*> my_need_issue;
+  if (!pneed_issue)
+    pneed_issue = &my_need_issue;
+
+  _drop_non_rdlocks(mut, pneed_issue);
+  _drop_rdlocks(mut, pneed_issue);
 
   if (pneed_issue == &my_need_issue)
     issue_caps_set(*pneed_issue);
@@ -498,23 +508,7 @@ void Locker::drop_non_rdlocks(Mutation *mut, set<CInode*> *pneed_issue)
   if (!pneed_issue)
     pneed_issue = &my_need_issue;
 
-  while (!mut->xlocks.empty()) {
-    bool ni = false;
-    MDSCacheObject *p = (*mut->xlocks.begin())->get_parent();
-    xlock_finish(*mut->xlocks.begin(), mut, &ni);
-    if (ni)
-      pneed_issue->insert((CInode*)p);
-  }
-  while (!mut->remote_wrlocks.empty()) {
-    remote_wrlock_finish(mut->remote_wrlocks.begin()->first, mut->remote_wrlocks.begin()->second, mut);
-  }
-  while (!mut->wrlocks.empty()) {
-    bool ni = false;
-    MDSCacheObject *p = (*mut->wrlocks.begin())->get_parent();
-    wrlock_finish(*mut->wrlocks.begin(), mut, &ni);
-    if (ni)
-      pneed_issue->insert((CInode*)p);
-  }
+  _drop_non_rdlocks(mut, pneed_issue);
 
   if (pneed_issue == &my_need_issue)
     issue_caps_set(*pneed_issue);
@@ -526,13 +520,7 @@ void Locker::drop_rdlocks(Mutation *mut, set<CInode*> *pneed_issue)
   if (!pneed_issue)
     pneed_issue = &my_need_issue;
 
-  while (!mut->rdlocks.empty()) {
-    bool ni = false;
-    MDSCacheObject *p = (*mut->rdlocks.begin())->get_parent();
-    rdlock_finish(*mut->rdlocks.begin(), mut, &ni);
-    if (ni)
-      pneed_issue->insert((CInode*)p);
-  }
+  _drop_rdlocks(mut, pneed_issue);
 
   if (pneed_issue == &my_need_issue)
     issue_caps_set(*pneed_issue);
index 39f01f80bf460f33e908f33222badfbc18c27fdb..04016f866f76f2baffaa0c01a3032e4ff11d73ff 100644 (file)
@@ -77,6 +77,8 @@ protected:
   void send_lock_message(SimpleLock *lock, int msg, const bufferlist &data);
 
   // -- locks --
+  void _drop_rdlocks(Mutation *mut, set<CInode*> *pneed_issue);
+  void _drop_non_rdlocks(Mutation *mut, set<CInode*> *pneed_issue);
 public:
   void include_snap_rdlocks(set<SimpleLock*>& rdlocks, CInode *in);
   void include_snap_rdlocks_wlayout(set<SimpleLock*>& rdlocks, CInode *in,