From 3ba2e2e21a187474d556722d1ef30c79628f1c50 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Wed, 2 Nov 2016 17:38:49 -0700 Subject: [PATCH] ReplicatedPG::do_update_log_missing: take the pg lock in the callback Fixes: http://tracker.ceph.com/issues/17789 Signed-off-by: Samuel Just --- src/osd/ReplicatedPG.cc | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 5bbd4a47e5425..2ec8000146920 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -9894,13 +9894,13 @@ void ReplicatedPG::do_update_log_missing(OpRequestRef &op) assert(m->get_type() == MSG_OSD_PG_UPDATE_LOG_MISSING); ObjectStore::Transaction t; append_log_entries_update_missing(m->entries, t); - // TODO FIX Context *complete = new FunctionContext( - [=](int) { - MOSDPGUpdateLogMissing *msg = - static_cast( - op->get_req()); + [=](int) { + MOSDPGUpdateLogMissing *msg = static_cast( + op->get_req()); + lock(); + if (!pg_has_reset_since(msg->get_epoch())) { MOSDPGUpdateLogMissingReply *reply = new MOSDPGUpdateLogMissingReply( spg_t(info.pgid.pgid, primary_shard().shard), @@ -9909,7 +9909,9 @@ void ReplicatedPG::do_update_log_missing(OpRequestRef &op) msg->get_tid()); reply->set_priority(CEPH_MSG_PRIO_HIGH); msg->get_connection()->send_message(reply); - }); + } + unlock(); + }); /* Hack to work around the fact that ReplicatedBackend sends * ack+commit if commit happens first */