From: David Zafman Date: Thu, 22 Sep 2016 21:15:13 +0000 (-0700) Subject: osd: Remove extra call to reg_next_scrub() during splits X-Git-Tag: v10.2.6~36^2~16^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cbf5b7a432cde4059cd054312351534626f4150e;p=ceph.git osd: Remove extra call to reg_next_scrub() during splits Add assert() to catch this in the future Fixes: http://tracker.ceph.com/issues/16474 Signed-off-by: David Zafman (cherry picked from commit 9e43346a0df062d618fa5710564e30db3ca9e5a5) Conflicts: src/osd/OSD.cc (trivial) --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 6b503a50b60d..8bbe6d365ff2 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -2939,7 +2939,6 @@ void OSD::add_newly_split_pg(PG *pg, PG::RecoveryCtx *rctx) pg->get_osdmap()->pg_to_up_acting_osds(pg->info.pgid.pgid, up, acting); int role = OSDMap::calc_pg_role(service.whoami, acting); pg->set_role(role); - pg->reg_next_scrub(); pg->handle_loaded(rctx); pg->write_if_dirty(*(rctx->transaction)); pg->queue_null(e, e); diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 39b5bf8b652c..7313bde02dcd 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -3428,6 +3428,7 @@ void PG::reg_next_scrub() double scrub_min_interval = 0, scrub_max_interval = 0; pool.info.opts.get(pool_opts_t::SCRUB_MIN_INTERVAL, &scrub_min_interval); pool.info.opts.get(pool_opts_t::SCRUB_MAX_INTERVAL, &scrub_max_interval); + assert(scrubber.scrub_reg_stamp == utime_t()); scrubber.scrub_reg_stamp = osd->reg_pg_scrub(info.pgid, reg_stamp, scrub_min_interval, @@ -3437,8 +3438,10 @@ void PG::reg_next_scrub() void PG::unreg_next_scrub() { - if (is_primary()) + if (is_primary()) { osd->unreg_pg_scrub(info.pgid, scrubber.scrub_reg_stamp); + scrubber.scrub_reg_stamp = utime_t(); + } } void PG::sub_op_scrub_map(OpRequestRef op)