From: Samuel Just Date: Thu, 27 Aug 2015 18:08:33 +0000 (-0700) Subject: PG::handle_advance_map: on_pool_change after handling the map change X-Git-Tag: v9.1.0~205^2^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=14e02bc90a463805f4c3e2de210892067a52514b;p=ceph.git PG::handle_advance_map: on_pool_change after handling the map change Otherwise, the is_active() checks in the hitset code can erroneously return true firing off repops stamped with the new epoch which then get cleared in the map change code. The filestore callbacks then pass the interval check and call into a destroyed repop structure. Fixes: 12809 Backport: hammer,firefly Signed-off-by: Samuel Just --- diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 36c664129a53..cf8faf696ec9 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -5279,12 +5279,12 @@ void PG::handle_advance_map( << dendl; update_osdmap_ref(osdmap); pool.update(osdmap); - if (pool.info.last_change == osdmap_ref->get_epoch()) - on_pool_change(); AdvMap evt( osdmap, lastmap, newup, up_primary, newacting, acting_primary); recovery_state.handle_event(evt, rctx); + if (pool.info.last_change == osdmap_ref->get_epoch()) + on_pool_change(); } void PG::handle_activate_map(RecoveryCtx *rctx)