From 8e82deaf514e2789f4710826e255e6967c1d9abe Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Fri, 13 Nov 2015 14:06:57 -0800 Subject: [PATCH] ReplicatedPG::scrub: use register_on_commit rather than on_finish Signed-off-by: Samuel Just --- src/osd/ReplicatedPG.cc | 26 +++++++++----------------- src/osd/ReplicatedPG.h | 1 - 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 9ac783929972..74efe97dd355 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -12214,22 +12214,6 @@ bool ReplicatedPG::_range_available_for_scrub( return true; } -struct C_ScrubDigestUpdated : public Context { - ReplicatedPGRef pg; - explicit C_ScrubDigestUpdated(ReplicatedPG *pg) : pg(pg) {} - void finish(int r) { - pg->_scrub_digest_updated(); - } -}; - -void ReplicatedPG::_scrub_digest_updated() -{ - dout(20) << __func__ << dendl; - if (--scrubber.num_digest_updates_pending == 0) { - requeue_scrub(); - } -} - static bool doing_clones(const boost::optional &snapset, const vector::reverse_iterator &curclone) { return snapset && curclone != snapset.get().clones.rend(); @@ -12615,7 +12599,15 @@ void ReplicatedPG::_scrub( ctx->new_obs.oi.set_data_digest(p->second.first); ctx->new_obs.oi.set_omap_digest(p->second.second); finish_ctx(ctx.get(), pg_log_entry_t::MODIFY, true, true); - ctx->on_finish = new C_ScrubDigestUpdated(this); + + ctx->register_on_success( + [this]() { + dout(20) << "updating scrub digest" << dendl; + if (--scrubber.num_digest_updates_pending == 0) { + requeue_scrub(); + } + }); + simple_opc_submit(std::move(ctx)); ++scrubber.num_digest_updates_pending; } diff --git a/src/osd/ReplicatedPG.h b/src/osd/ReplicatedPG.h index d51fe7060333..f4560a652108 100644 --- a/src/osd/ReplicatedPG.h +++ b/src/osd/ReplicatedPG.h @@ -1449,7 +1449,6 @@ protected: virtual void _scrub( ScrubMap &map, const std::map, hobject_t::BitwiseComparator> &missing_digest); - void _scrub_digest_updated(); virtual void _scrub_clear_state(); virtual void _scrub_finish(); object_stat_collection_t scrub_cstat; -- 2.47.3