]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: fix lock inversion with ondisk_write_unlock
authorSage Weil <sage@newdream.net>
Mon, 8 Feb 2010 19:29:25 +0000 (11:29 -0800)
committerSage Weil <sage@newdream.net>
Tue, 9 Feb 2010 16:09:16 +0000 (08:09 -0800)
Drop write lock before taking pg lock.

src/osd/ReplicatedPG.cc

index 3b077026b963c3eb9db1df2eeaa8a8af3bdad9ab..846644ddcdf137e8ca9a603ff72c27e028a489e5 100644 (file)
@@ -1765,6 +1765,8 @@ void ReplicatedPG::apply_repop(RepGather *repop)
 
 void ReplicatedPG::op_applied(RepGather *repop)
 {
+  repop->obc->ondisk_write_unlock();
+
   lock();
   dout(10) << "op_applied " << *repop << dendl;
 
@@ -1792,8 +1794,6 @@ void ReplicatedPG::op_applied(RepGather *repop)
   mode.write_applied();
   dout(10) << "op_applied mode now " << mode << " (finish_write)" << dendl;
 
-  repop->obc->ondisk_write_unlock();
-
   put_object_context(repop->obc);
   repop->obc = 0;
 
@@ -2954,8 +2954,8 @@ void ReplicatedPG::_committed(epoch_t same_since, eversion_t last_complete)
 void ReplicatedPG::_wrote_pushed_object(ObjectStore::Transaction *t, ObjectContext *obc)
 {
   dout(10) << "_wrote_pushed_object " << *obc << dendl;
-  lock();
   obc->ondisk_write_unlock();
+  lock();
   put_object_context(obc);
   unlock();
   delete t;