From 408c81c21093ea1ec9cfe3ebc06e37ecd50e10cb Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 8 Feb 2010 11:29:25 -0800 Subject: [PATCH] osd: fix lock inversion with ondisk_write_unlock Drop write lock before taking pg lock. --- src/osd/ReplicatedPG.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 3b077026b963c..846644ddcdf13 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -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; -- 2.39.5