]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Locker: use raw MutationImpl* instead of MutationRef in several places
authorGreg Farnum <greg@inktank.com>
Wed, 12 Mar 2014 20:03:26 +0000 (13:03 -0700)
committerGreg Farnum <greg@inktank.com>
Tue, 8 Apr 2014 00:00:19 +0000 (17:00 -0700)
Sadly, you can't implicitly convert non-const references to shared pointers, so avoid the atomic ops necessary when copying a shared_ptr.

Signed-off-by: Greg Farnum <greg@inktank.com>
src/mds/Locker.cc
src/mds/Locker.h
src/mds/MDCache.cc
src/mds/Migrator.cc
src/mds/Server.cc

index b9894662ae0547be90c897f61798e7c892f40b5e..12a61f3ef847b0c0300f579fa27d7fc5eadd1894 100644 (file)
@@ -288,7 +288,7 @@ bool Locker::acquire_locks(MDRequestRef& mdr,
     
     if (!object->is_auth()) {
       if (!mdr->locks.empty())
-       mds->locker->drop_locks(mdr);
+       mds->locker->drop_locks(mdr.get());
       if (object->is_ambiguous_auth()) {
        // wait
        dout(10) << " ambiguous auth, waiting to authpin " << *object << dendl;
@@ -301,7 +301,7 @@ bool Locker::acquire_locks(MDRequestRef& mdr,
     }
     if (!object->can_auth_pin()) {
       // wait
-      mds->locker->drop_locks(mdr);
+      mds->locker->drop_locks(mdr.get());
       mdr->drop_local_auth_pins();
       if (auth_pin_nonblock) {
        dout(10) << " can't auth_pin (freezing?) " << *object << ", nonblocking" << dendl;
@@ -393,7 +393,7 @@ bool Locker::acquire_locks(MDRequestRef& mdr,
            mdr->remote_wrlocks[have] != (*remote_wrlocks)[have]) {
          dout(10) << " unlocking remote_wrlock on wrong mds." << mdr->remote_wrlocks[have]
                   << " " << *have << " " << *have->get_parent() << dendl;
-         remote_wrlock_finish(have, mdr->remote_wrlocks[have], mdr);
+         remote_wrlock_finish(have, mdr->remote_wrlocks[have], mdr.get());
        }
       }
       if (need_wrlock || need_remote_wrlock) {
@@ -422,7 +422,7 @@ bool Locker::acquire_locks(MDRequestRef& mdr,
        else if (need_remote_wrlock) // acquire remote_wrlock first
          dout(10) << " unlocking out-of-order " << *lock << " " << *lock->get_parent() << dendl;
        bool need_issue = false;
-       wrlock_finish(lock, mdr, &need_issue);
+       wrlock_finish(lock, mdr.get(), &need_issue);
        if (need_issue)
          issue_set.insert(static_cast<CInode*>(lock->get_parent()));
       }
@@ -434,15 +434,15 @@ bool Locker::acquire_locks(MDRequestRef& mdr,
       dout(10) << " unlocking out-of-order " << *stray << " " << *stray->get_parent() << dendl;
       bool need_issue = false;
       if (mdr->xlocks.count(stray)) {
-       xlock_finish(stray, mdr, &need_issue);
+       xlock_finish(stray, mdr.get(), &need_issue);
       } else if (mdr->rdlocks.count(stray)) {
-       rdlock_finish(stray, mdr, &need_issue);
+       rdlock_finish(stray, mdr.get(), &need_issue);
       } else {
        // may have acquired both wrlock and remore wrlock
        if (mdr->wrlocks.count(stray))
-         wrlock_finish(stray, mdr, &need_issue);
+         wrlock_finish(stray, mdr.get(), &need_issue);
        if (mdr->remote_wrlocks.count(stray))
-         remote_wrlock_finish(stray, mdr->remote_wrlocks[stray], mdr);
+         remote_wrlock_finish(stray, mdr->remote_wrlocks[stray], mdr.get());
       }
       if (need_issue)
        issue_set.insert(static_cast<CInode*>(stray->get_parent()));
@@ -450,7 +450,7 @@ bool Locker::acquire_locks(MDRequestRef& mdr,
 
     // lock
     if (mdr->locking && *p != mdr->locking) {
-      cancel_locking(mdr, &issue_set);
+      cancel_locking(mdr.get(), &issue_set);
     }
     if (xlocks.count(*p)) {
       if (!xlock_start(*p, mdr)) 
@@ -465,7 +465,7 @@ bool Locker::acquire_locks(MDRequestRef& mdr,
        if (need_remote_wrlock && !(*p)->can_wrlock(mdr->get_client())) {
          // can't take the wrlock because the scatter lock is gathering. need to
          // release the remote wrlock, so that the gathering process can finish.
-         remote_wrlock_finish(*p, mdr->remote_wrlocks[*p], mdr);
+         remote_wrlock_finish(*p, mdr->remote_wrlocks[*p], mdr.get());
          remote_wrlock_start(*p, (*remote_wrlocks)[*p], mdr);
          goto out;
        }
@@ -487,15 +487,15 @@ bool Locker::acquire_locks(MDRequestRef& mdr,
     dout(10) << " unlocking extra " << *stray << " " << *stray->get_parent() << dendl;
     bool need_issue = false;
     if (mdr->xlocks.count(stray)) {
-      xlock_finish(stray, mdr, &need_issue);
+      xlock_finish(stray, mdr.get(), &need_issue);
     } else if (mdr->rdlocks.count(stray)) {
-      rdlock_finish(stray, mdr, &need_issue);
+      rdlock_finish(stray, mdr.get(), &need_issue);
     } else {
       // may have acquired both wrlock and remore wrlock
       if (mdr->wrlocks.count(stray))
-       wrlock_finish(stray, mdr, &need_issue);
+       wrlock_finish(stray, mdr.get(), &need_issue);
       if (mdr->remote_wrlocks.count(stray))
-       remote_wrlock_finish(stray, mdr->remote_wrlocks[stray], mdr);
+       remote_wrlock_finish(stray, mdr->remote_wrlocks[stray], mdr.get());
     }
     if (need_issue)
       issue_set.insert(static_cast<CInode*>(stray->get_parent()));
@@ -510,7 +510,7 @@ bool Locker::acquire_locks(MDRequestRef& mdr,
 }
 
 
-void Locker::set_xlocks_done(MutationRef& mut, bool skip_dentry)
+void Locker::set_xlocks_done(MutationImpl *mut, bool skip_dentry)
 {
   for (set<SimpleLock*>::iterator p = mut->xlocks.begin();
        p != mut->xlocks.end();
@@ -523,7 +523,7 @@ void Locker::set_xlocks_done(MutationRef& mut, bool skip_dentry)
   }
 }
 
-void Locker::_drop_rdlocks(MutationRef& mut, set<CInode*> *pneed_issue)
+void Locker::_drop_rdlocks(MutationImpl *mut, set<CInode*> *pneed_issue)
 {
   while (!mut->rdlocks.empty()) {
     bool ni = false;
@@ -534,7 +534,7 @@ void Locker::_drop_rdlocks(MutationRef& mut, set<CInode*> *pneed_issue)
   }
 }
 
-void Locker::_drop_non_rdlocks(MutationRef& mut, set<CInode*> *pneed_issue)
+void Locker::_drop_non_rdlocks(MutationImpl *mut, set<CInode*> *pneed_issue)
 {
   set<int> slaves;
 
@@ -581,7 +581,7 @@ void Locker::_drop_non_rdlocks(MutationRef& mut, set<CInode*> *pneed_issue)
   }
 }
 
-void Locker::cancel_locking(MutationRef& mut, set<CInode*> *pneed_issue)
+void Locker::cancel_locking(MutationImpl *mut, set<CInode*> *pneed_issue)
 {
   SimpleLock *lock = mut->locking;
   assert(lock);
@@ -602,7 +602,7 @@ void Locker::cancel_locking(MutationRef& mut, set<CInode*> *pneed_issue)
   mut->finish_locking(lock);
 }
 
-void Locker::drop_locks(MutationRef& mut, set<CInode*> *pneed_issue)
+void Locker::drop_locks(MutationImpl *mut, set<CInode*> *pneed_issue)
 {
   // leftover locks
   set<CInode*> my_need_issue;
@@ -619,7 +619,7 @@ void Locker::drop_locks(MutationRef& mut, set<CInode*> *pneed_issue)
   mut->done_locking = false;
 }
 
-void Locker::drop_non_rdlocks(MutationRef& mut, set<CInode*> *pneed_issue)
+void Locker::drop_non_rdlocks(MutationImpl *mut, set<CInode*> *pneed_issue)
 {
   set<CInode*> my_need_issue;
   if (!pneed_issue)
@@ -631,7 +631,7 @@ void Locker::drop_non_rdlocks(MutationRef& mut, set<CInode*> *pneed_issue)
     issue_caps_set(*pneed_issue);
 }
 
-void Locker::drop_rdlocks(MutationRef& mut, set<CInode*> *pneed_issue)
+void Locker::drop_rdlocks(MutationImpl *mut, set<CInode*> *pneed_issue)
 {
   set<CInode*> my_need_issue;
   if (!pneed_issue)
@@ -1218,7 +1218,7 @@ void Locker::nudge_log(SimpleLock *lock)
     mds->mdlog->flush();
 }
 
-void Locker::rdlock_finish(SimpleLock *lock, MutationRef& mut, bool *pneed_issue)
+void Locker::rdlock_finish(SimpleLock *lock, MutationImpl *mut, bool *pneed_issue)
 {
   // drop ref
   lock->put_rdlock();
@@ -1351,7 +1351,7 @@ bool Locker::wrlock_start(SimpleLock *lock, MDRequestRef& mut, bool nowait)
   return false;
 }
 
-void Locker::wrlock_finish(SimpleLock *lock, MutationRef& mut, bool *pneed_issue)
+void Locker::wrlock_finish(SimpleLock *lock, MutationImpl *mut, bool *pneed_issue)
 {
   if (lock->get_type() == CEPH_LOCK_IVERSION ||
       lock->get_type() == CEPH_LOCK_DVERSION)
@@ -1402,7 +1402,7 @@ void Locker::remote_wrlock_start(SimpleLock *lock, int target, MDRequestRef& mut
 }
 
 void Locker::remote_wrlock_finish(SimpleLock *lock, int target,
-                                  MutationRef& mut)
+                                  MutationImpl *mut)
 {
   // drop ref
   mut->remote_wrlocks.erase(lock);
@@ -1523,7 +1523,7 @@ void Locker::_finish_xlock(SimpleLock *lock, client_t xlocker, bool *pneed_issue
   eval_gather(lock, true, pneed_issue);
 }
 
-void Locker::xlock_finish(SimpleLock *lock, MutationRef& mut, bool *pneed_issue)
+void Locker::xlock_finish(SimpleLock *lock, MutationImpl *mut, bool *pneed_issue)
 {
   if (lock->get_type() == CEPH_LOCK_IVERSION ||
       lock->get_type() == CEPH_LOCK_DVERSION)
@@ -1578,7 +1578,7 @@ void Locker::xlock_finish(SimpleLock *lock, MutationRef& mut, bool *pneed_issue)
   }
 }
 
-void Locker::xlock_export(SimpleLock *lock, MutationRef& mut)
+void Locker::xlock_export(SimpleLock *lock, MutationImpl *mut)
 {
   dout(10) << "xlock_export on " << *lock << " " << *lock->get_parent() << dendl;
 
@@ -1645,7 +1645,7 @@ void Locker::file_update_finish(CInode *in, MutationRef& mut, bool share, client
     mds->send_message_client_counted(ack, client);
 
   set<CInode*> need_issue;
-  drop_locks(mut, &need_issue);
+  drop_locks(mut.get(), &need_issue);
 
   if (!in->is_head() && !in->client_snap_caps.empty()) {
     dout(10) << " client_snap_caps " << in->client_snap_caps << dendl;
@@ -3878,7 +3878,7 @@ void Locker::scatter_writebehind_finish(ScatterLock *lock, MutationRef& mut)
   }
 
   mut->apply();
-  drop_locks(mut);
+  drop_locks(mut.get());
   mut->cleanup();
 
   if (lock->is_stable())
@@ -4180,7 +4180,7 @@ bool Locker::local_wrlock_start(LocalLock *lock, MDRequestRef& mut)
   }
 }
 
-void Locker::local_wrlock_finish(LocalLock *lock, MutationRef& mut)
+void Locker::local_wrlock_finish(LocalLock *lock, MutationImpl *mut)
 {
   dout(7) << "local_wrlock_finish  on " << *lock
          << " on " << *lock->get_parent() << dendl;  
@@ -4211,7 +4211,7 @@ bool Locker::local_xlock_start(LocalLock *lock, MDRequestRef& mut)
   return true;
 }
 
-void Locker::local_xlock_finish(LocalLock *lock, MutationRef& mut)
+void Locker::local_xlock_finish(LocalLock *lock, MutationImpl *mut)
 {
   dout(7) << "local_xlock_finish  on " << *lock
          << " on " << *lock->get_parent() << dendl;  
index bcc19c750ec4cb06b9e8c9e423fa116c7ed1ca07..17b3c47002e6781d2d4bc9501f9e04b6d1de36a3 100644 (file)
@@ -75,8 +75,8 @@ protected:
   void send_lock_message(SimpleLock *lock, int msg, const bufferlist &data);
 
   // -- locks --
-  void _drop_rdlocks(MutationRef& mut, set<CInode*> *pneed_issue);
-  void _drop_non_rdlocks(MutationRef& mut, set<CInode*> *pneed_issue);
+  void _drop_rdlocks(MutationImpl *mut, set<CInode*> *pneed_issue);
+  void _drop_non_rdlocks(MutationImpl *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,
@@ -90,11 +90,11 @@ public:
                     CInode *auth_pin_freeze=NULL,
                     bool auth_pin_nonblock=false);
 
-  void cancel_locking(MutationRef& mut, set<CInode*> *pneed_issue);
-  void drop_locks(MutationRef& mut, set<CInode*> *pneed_issue=0);
-  void set_xlocks_done(MutationRef& mut, bool skip_dentry=false);
-  void drop_non_rdlocks(MutationRef& mut, set<CInode*> *pneed_issue=0);
-  void drop_rdlocks(MutationRef& mut, set<CInode*> *pneed_issue=0);
+  void cancel_locking(MutationImpl *mut, set<CInode*> *pneed_issue);
+  void drop_locks(MutationImpl *mut, set<CInode*> *pneed_issue=0);
+  void set_xlocks_done(MutationImpl *mut, bool skip_dentry=false);
+  void drop_non_rdlocks(MutationImpl *mut, set<CInode*> *pneed_issue=0);
+  void drop_rdlocks(MutationImpl *mut, set<CInode*> *pneed_issue=0);
 
   void eval_gather(SimpleLock *lock, bool first=false, bool *need_issue=0, list<Context*> *pfinishers=0);
   void eval(SimpleLock *lock, bool *need_issue);
@@ -128,23 +128,23 @@ public:
   bool _rdlock_kick(SimpleLock *lock, bool as_anon);
   bool rdlock_try(SimpleLock *lock, client_t client, Context *c);
   bool rdlock_start(SimpleLock *lock, MDRequestRef& mut, bool as_anon=false);
-  void rdlock_finish(SimpleLock *lock, MutationRef& mut, bool *pneed_issue);
+  void rdlock_finish(SimpleLock *lock, MutationImpl *mut, bool *pneed_issue);
   bool can_rdlock_set(set<SimpleLock*>& locks);
   bool rdlock_try_set(set<SimpleLock*>& locks);
   void rdlock_take_set(set<SimpleLock*>& locks, MutationRef& mut);
 
   void wrlock_force(SimpleLock *lock, MutationRef& mut);
   bool wrlock_start(SimpleLock *lock, MDRequestRef& mut, bool nowait=false);
-  void wrlock_finish(SimpleLock *lock, MutationRef& mut, bool *pneed_issue);
+  void wrlock_finish(SimpleLock *lock, MutationImpl *mut, bool *pneed_issue);
 
   void remote_wrlock_start(SimpleLock *lock, int target, MDRequestRef& mut);
-  void remote_wrlock_finish(SimpleLock *lock, int target, MutationRef& mut);
+  void remote_wrlock_finish(SimpleLock *lock, int target, MutationImpl *mut);
 
   bool xlock_start(SimpleLock *lock, MDRequestRef& mut);
   void _finish_xlock(SimpleLock *lock, client_t xlocker, bool *pneed_issue);
-  void xlock_finish(SimpleLock *lock, MutationRef& mut, bool *pneed_issue);
+  void xlock_finish(SimpleLock *lock, MutationImpl *mut, bool *pneed_issue);
 
-  void xlock_export(SimpleLock *lock, MutationRef& mut);
+  void xlock_export(SimpleLock *lock, MutationImpl *mut);
   void xlock_import(SimpleLock *lock);
 
 
@@ -233,9 +233,9 @@ public:
   void local_wrlock_grab(LocalLock *lock, MutationRef& mut);
 protected:
   bool local_wrlock_start(LocalLock *lock, MDRequestRef& mut);
-  void local_wrlock_finish(LocalLock *lock, MutationRef& mut);
+  void local_wrlock_finish(LocalLock *lock, MutationImpl *mut);
   bool local_xlock_start(LocalLock *lock, MDRequestRef& mut);
-  void local_xlock_finish(LocalLock *lock, MutationRef& mut);
+  void local_xlock_finish(LocalLock *lock, MutationImpl *mut);
 
 
   // file
index 250253ea1e22837874e26436a1c887909a2a99ae..b490b6519cd733f42ae657498f27c16ea86834b5 100644 (file)
@@ -491,7 +491,7 @@ void MDCache::_create_system_file_finish(MutationRef& mut, CDentry *dn, version_
   }
 
   mut->apply();
-  mds->locker->drop_locks(mut);
+  mds->locker->drop_locks(mut.get());
   mut->cleanup();
 
   fin->complete(0);
@@ -890,7 +890,7 @@ void MDCache::subtree_merge_writebehind_finish(CInode *in, MutationRef& mut)
   in->pop_and_dirty_projected_inode(mut->ls);
 
   mut->apply();
-  mds->locker->drop_locks(mut);
+  mds->locker->drop_locks(mut.get());
   mut->cleanup();
 
   in->auth_unpin(this);
@@ -5921,7 +5921,7 @@ void MDCache::_queued_file_recover_cow(CInode *in, MutationRef& mut)
 {
   in->pop_and_dirty_projected_inode(mut->ls);
   mut->apply();
-  mds->locker->drop_locks(mut);
+  mds->locker->drop_locks(mut.get());
   mut->cleanup();
 }
 
@@ -6201,7 +6201,7 @@ void MDCache::truncate_inode_logged(CInode *in, MutationRef& mut)
 {
   dout(10) << "truncate_inode_logged " << *in << dendl;
   mut->apply();
-  mds->locker->drop_locks(mut);
+  mds->locker->drop_locks(mut.get());
   mut->cleanup();
 
   in->put(CInode::PIN_TRUNCATING);
@@ -9021,13 +9021,13 @@ void MDCache::request_drop_foreign_locks(MDRequestRef& mdr)
 void MDCache::request_drop_non_rdlocks(MDRequestRef& mdr)
 {
   request_drop_foreign_locks(mdr);
-  mds->locker->drop_non_rdlocks(mdr);
+  mds->locker->drop_non_rdlocks(mdr.get());
 }
 
 void MDCache::request_drop_locks(MDRequestRef& mdr)
 {
   request_drop_foreign_locks(mdr);
-  mds->locker->drop_locks(mdr);
+  mds->locker->drop_locks(mdr.get());
 }
 
 void MDCache::request_cleanup(MDRequestRef& mdr)
@@ -9267,7 +9267,7 @@ void MDCache::_anchor_logged(CInode *in, version_t atid, MutationRef& mut)
   mds->anchorclient->commit(atid, mut->ls);
 
   // drop locks and finish
-  mds->locker->drop_locks(mut);
+  mds->locker->drop_locks(mut.get());
   mut->cleanup();
 
   // trigger waiters
@@ -9401,7 +9401,7 @@ void MDCache::_snaprealm_create_finish(MDRequestRef& mdr, MutationRef& mut, CIno
   // apply
   in->pop_and_dirty_projected_inode(mut->ls);
   mut->apply();
-  mds->locker->drop_locks(mut);
+  mds->locker->drop_locks(mut.get());
   mut->cleanup();
 
   // tell table we've committed
@@ -11707,7 +11707,7 @@ void MDCache::_fragment_stored(MDRequestRef& mdr)
   mds->mdlog->start_submit_entry(le, new C_MDC_FragmentCommit(this, basedirfrag,
                                                              info.resultfrags));
 
-  mds->locker->drop_locks(mdr);
+  mds->locker->drop_locks(mdr.get());
 
   // unfreeze resulting frags
   for (list<CDir*>::iterator p = info.resultfrags.begin();
index b0cb41849cbba7eaa1c7daf8646c5d8ea5445709..e873bf950470dc94e6e0999b9e4a463a89558507 100644 (file)
@@ -332,7 +332,7 @@ void Migrator::export_try_cancel(CDir *dir, bool notify_peer)
        mds->mdcache->request_finish(mdr);
     } else if (it->second.mut) {
       MutationRef& mut = it->second.mut;
-      mds->locker->drop_locks(mut);
+      mds->locker->drop_locks(mut.get());
       mut->cleanup();
     }
 
@@ -1803,7 +1803,7 @@ void Migrator::export_finish(CDir *dir)
   // unpin path
   MutationRef& mut = it->second.mut;
   if (mut) {
-    mds->locker->drop_locks(mut);
+    mds->locker->drop_locks(mut.get());
     mut->cleanup();
   }
 
@@ -2473,7 +2473,7 @@ void Migrator::import_reverse_final(CDir *dir)
   // clean up
   map<dirfrag_t, import_state_t>::iterator it = import_state.find(dir->dirfrag());
   if (it->second.mut) {
-    mds->locker->drop_locks(it->second.mut);
+    mds->locker->drop_locks(it->second.mut.get());
     it->second.mut->cleanup();
   }
   import_state.erase(it);
@@ -2636,7 +2636,7 @@ void Migrator::import_finish(CDir *dir, bool notify, bool last)
   //audit();  // this fails, bc we munge up the subtree map during handle_import_map (resolve phase)
 
   if (mut) {
-    mds->locker->drop_locks(mut);
+    mds->locker->drop_locks(mut.get());
     mut->cleanup();
   }
 
index 2f45af98e81b3f0d7fd6eac7bec39c95cd34ea1f..9b00e4a79176c1af9cf5f93c85ad7d00e7589d49 100644 (file)
@@ -807,7 +807,7 @@ void Server::journal_and_reply(MDRequestRef& mdr, CInode *in, CDentry *dn, LogEv
       mdlog->flush();
     }
   } else if (mdr->did_early_reply)
-    mds->locker->drop_rdlocks(mdr);
+    mds->locker->drop_rdlocks(mdr.get());
   else
     mdlog->flush();
 }
@@ -856,7 +856,7 @@ void Server::early_reply(MDRequestRef& mdr, CInode *tracei, CDentry *tracedn)
   //_rename_finish() does not send dentry link/unlink message to replicas.
   // so do not set xlocks on dentries "done", the xlocks prevent dentries
   // that have projected linkages from getting new replica.
-  mds->locker->set_xlocks_done(mdr, mdr->client_request->get_op() == CEPH_MDS_OP_RENAME);
+  mds->locker->set_xlocks_done(mdr.get(), mdr->client_request->get_op() == CEPH_MDS_OP_RENAME);
 
   char buf[80];
   dout(10) << "early_reply " << reply->get_result() 
@@ -1552,10 +1552,10 @@ void Server::dispatch_slave_request(MDRequestRef& mdr)
       bool need_issue = false;
       switch (op) {
       case MMDSSlaveRequest::OP_UNXLOCK:
-       mds->locker->xlock_finish(lock, mdr, &need_issue);
+       mds->locker->xlock_finish(lock, mdr.get(), &need_issue);
        break;
       case MMDSSlaveRequest::OP_UNWRLOCK:
-       mds->locker->wrlock_finish(lock, mdr, &need_issue);
+       mds->locker->wrlock_finish(lock, mdr.get(), &need_issue);
        break;
       }
       if (need_issue)
@@ -1568,7 +1568,7 @@ void Server::dispatch_slave_request(MDRequestRef& mdr)
     break;
 
   case MMDSSlaveRequest::OP_DROPLOCKS:
-    mds->locker->drop_locks(mdr);
+    mds->locker->drop_locks(mdr.get());
     mdr->slave_request->put();
     mdr->slave_request = 0;
     break;
@@ -2139,7 +2139,7 @@ CInode* Server::rdlock_path_pin_ref(MDRequestRef& mdr, int n,
        * a single MDS request; otherwise we'd be in
        * rdlock_path_xlock_dentry.
        */
-      mds->locker->drop_locks(mdr, NULL);
+      mds->locker->drop_locks(mdr.get(), NULL);
       mdr->drop_local_auth_pins();
       return 0;
     }
@@ -2843,7 +2843,7 @@ void Server::handle_client_readdir(MDRequestRef& mdr)
   if (!dir->is_complete()) {
     if (dir->is_frozen()) {
       dout(7) << "dir is frozen " << *dir << dendl;
-      mds->locker->drop_locks(mdr);
+      mds->locker->drop_locks(mdr.get());
       mdr->drop_local_auth_pins();
       dir->add_waiter(CDir::WAIT_UNFREEZE, new C_MDS_RetryRequest(mdcache, mdr));
       return;
@@ -2948,7 +2948,7 @@ void Server::handle_client_readdir(MDRequestRef& mdr)
          break;
        }
 
-       mds->locker->drop_locks(mdr);
+       mds->locker->drop_locks(mdr.get());
        mdr->drop_local_auth_pins();
        mdcache->open_remote_dentry(dn, dnp, new C_MDS_RetryRequest(mdcache, mdr));
        return;
@@ -3136,7 +3136,7 @@ void Server::handle_client_file_setlock(MDRequestRef& mdr)
        dout(10) << " added to waiting list" << dendl;
        assert(lock_state->is_waiting(set_lock));
        mdr->more()->flock_was_waiting = true;
-       mds->locker->drop_locks(mdr);
+       mds->locker->drop_locks(mdr.get());
        mdr->drop_local_auth_pins();
        cur->add_waiter(CInode::WAIT_FLOCK, new C_MDS_RetryRequest(mdcache, mdr));
       }
@@ -6803,7 +6803,7 @@ void Server::_commit_slave_rename(MDRequestRef& mdr, int r,
        // we only care about xlocks on the exported inode
        if (lock->get_parent() == in &&
            !lock->is_locallock())
-         mds->locker->xlock_export(lock, mdr);
+         mds->locker->xlock_export(lock, mdr.get());
       }
 
       map<client_t,Capability::Import> peer_imported;