From: Ronen Friedman Date: Wed, 13 Jan 2021 12:13:56 +0000 (+0200) Subject: osd: adding safety checks when accessing m_scrubber X-Git-Tag: v16.1.0~14^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d5f3e314b3feddefc7bc8ee22b90aa176fb58f24;p=ceph.git osd: adding safety checks when accessing m_scrubber Verifying m_scrubber is there if accessed in a scenario that might coincide with PG removal. Signed-off-by: Ronen Friedman --- diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 960d068d3008..9a38b3866629 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -2584,7 +2584,7 @@ void PG::handle_query_state(Formatter *f) // This code has moved to after the close of recovery_state array. // I don't think that scrub is a recovery state - if (is_primary() && is_active() && m_scrubber->is_scrub_active()) { + if (is_primary() && is_active() && m_scrubber && m_scrubber->is_scrub_active()) { m_scrubber->handle_query_state(f); } } diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index c0fbdd342a5c..4427bff8249e 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -1014,7 +1014,7 @@ void PrimaryLogPG::do_command( handle_query_state(f.get()); f->close_section(); - if (is_primary() && is_active()) { + if (is_primary() && is_active() && m_scrubber) { m_scrubber->dump(f.get()); } @@ -1603,7 +1603,7 @@ int PrimaryLogPG::do_scrub_ls(const MOSDOp *m, OSDOp *osd_op) if (arg.interval != 0 && arg.interval != info.history.same_interval_since) { r = -EAGAIN; } else { - bool store_queried = m_scrubber->get_store_errors(arg, result); + bool store_queried = m_scrubber && m_scrubber->get_store_errors(arg, result); if (store_queried) { encode(result, osd_op->outdata); } else { @@ -1846,6 +1846,10 @@ void PrimaryLogPG::do_request( case MSG_OSD_SCRUB_RESERVE: { + if (!m_scrubber) { + osd->reply_op_error(op, -EAGAIN); + return; + } auto m = op->get_req(); switch (m->type) { case MOSDScrubReserve::REQUEST: diff --git a/src/osd/pg_scrubber.cc b/src/osd/pg_scrubber.cc index 578a2cf3407d..0eb513714e27 100644 --- a/src/osd/pg_scrubber.cc +++ b/src/osd/pg_scrubber.cc @@ -1890,8 +1890,6 @@ namespace Scrub { void ReplicaReservations::release_replica(pg_shard_t peer, epoch_t epoch) { - dout(15) << __func__ << " release-> " << peer << dendl; - auto m = new MOSDScrubReserve(spg_t(m_pg->info.pgid.pgid, peer.shard), epoch, MOSDScrubReserve::RELEASE, m_pg->pg_whoami); m_osds->send_message_osd_cluster(peer.osd, m, epoch);