]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: pass pissue_caps through *lock_finish()
authorSage Weil <sage@newdream.net>
Thu, 9 Jun 2011 17:03:08 +0000 (10:03 -0700)
committerSage Weil <sage@newdream.net>
Thu, 9 Jun 2011 23:14:01 +0000 (16:14 -0700)
This allows *lock_finish() callers to handle the issue_caps themselves.
None of them do yet (this arg is still optional) so this is patch has no
functional change (yet!).

Signed-off-by: Sage Weil <sage@newdream.net>
src/mds/Locker.cc
src/mds/Locker.h

index bac5b1027570b166ac978599669d992d4d276281..f5a5fa60904cf37aa48e688c98c226a4fcb8bfd0 100644 (file)
@@ -889,7 +889,7 @@ void Locker::nudge_log(SimpleLock *lock)
     mds->mdlog->flush();
 }
 
-void Locker::rdlock_finish(SimpleLock *lock, Mutation *mut)
+void Locker::rdlock_finish(SimpleLock *lock, Mutation *mut, bool *pneed_issue)
 {
   // drop ref
   lock->put_rdlock();
@@ -903,9 +903,9 @@ void Locker::rdlock_finish(SimpleLock *lock, Mutation *mut)
   // last one?
   if (!lock->is_rdlocked()) {
     if (!lock->is_stable())
-      eval_gather(lock);
+      eval_gather(lock, pneed_issue);
     else if (lock->get_parent()->is_auth())
-      eval(lock);
+      eval(lock, pneed_issue);
   }
 }
 
@@ -1024,7 +1024,7 @@ bool Locker::wrlock_start(SimpleLock *lock, MDRequest *mut, bool nowait)
   return false;
 }
 
-void Locker::wrlock_finish(SimpleLock *lock, Mutation *mut)
+void Locker::wrlock_finish(SimpleLock *lock, Mutation *mut, bool *pneed_issue)
 {
   if (lock->get_type() == CEPH_LOCK_IVERSION ||
       lock->get_type() == CEPH_LOCK_DVERSION)
@@ -1039,9 +1039,9 @@ void Locker::wrlock_finish(SimpleLock *lock, Mutation *mut)
 
   if (!lock->is_wrlocked()) {
     if (!lock->is_stable())
-      eval_gather(lock);
+      eval_gather(lock, pneed_issue);
     else if (lock->get_parent()->is_auth())
-      eval(lock);
+      eval(lock, pneed_issue);
   }
 }
 
@@ -1110,7 +1110,7 @@ bool Locker::xlock_start(SimpleLock *lock, MDRequest *mut)
   }
 }
 
-void Locker::xlock_finish(SimpleLock *lock, Mutation *mut)
+void Locker::xlock_finish(SimpleLock *lock, Mutation *mut, bool *pneed_issue)
 {
   if (lock->get_type() == CEPH_LOCK_IVERSION ||
       lock->get_type() == CEPH_LOCK_DVERSION)
@@ -1165,12 +1165,16 @@ void Locker::xlock_finish(SimpleLock *lock, Mutation *mut)
     
   // eval?
   if (!lock->is_stable())
-    eval_gather(lock);
+    eval_gather(lock, pneed_issue);
   else {
     if (lock->get_parent()->is_auth())
-      eval(lock);
-    if (do_issue && lock->get_type() != CEPH_LOCK_DN)
-      issue_caps((CInode*)lock->get_parent());
+      eval(lock, pneed_issue);
+    if (do_issue && lock->get_type() != CEPH_LOCK_DN) {
+      if (pneed_issue)
+       *pneed_issue = true;
+      else
+       issue_caps((CInode*)lock->get_parent());
+    }
   }
 }
 
index d2c9e3535946bfd6fc8219709adc1aaf9d5b860d..2c849dc2a253b26d1a8418fd8cc7716919f4fc81 100644 (file)
@@ -123,7 +123,7 @@ public:
   bool _rdlock_kick(SimpleLock *lock);
   bool rdlock_try(SimpleLock *lock, client_t client, Context *c);
   bool rdlock_start(SimpleLock *lock, MDRequest *mut, bool as_anon=false);
-  void rdlock_finish(SimpleLock *lock, Mutation *mut);
+  void rdlock_finish(SimpleLock *lock, Mutation *mut, bool *pneed_issue=0);
   bool can_rdlock_set(set<SimpleLock*>& locks);
   bool rdlock_try_set(set<SimpleLock*>& locks);
   void rdlock_take_set(set<SimpleLock*>& locks);
@@ -131,10 +131,10 @@ public:
 
   void wrlock_force(SimpleLock *lock, Mutation *mut);
   bool wrlock_start(SimpleLock *lock, MDRequest *mut, bool nowait=false);
-  void wrlock_finish(SimpleLock *lock, Mutation *mut);
+  void wrlock_finish(SimpleLock *lock, Mutation *mut, bool *pneed_issue=0);
 
   bool xlock_start(SimpleLock *lock, MDRequest *mut);
-  void xlock_finish(SimpleLock *lock, Mutation *mut);  // public for Server's slave UNXLOCK
+  void xlock_finish(SimpleLock *lock, Mutation *mut, bool *pneed_issue=0);
 
   void xlock_export(SimpleLock *lock, Mutation *mut);
   void xlock_import(SimpleLock *lock, Mutation *mut);