diff --git a/src/mon/PGMap.cc b/src/mon/PGMap.cc index 81162012b0e..fbef9bab0c4 100644 --- a/src/mon/PGMap.cc +++ b/src/mon/PGMap.cc @@ -468,7 +468,8 @@ void PGMap::stat_pg_add(const pg_t &pgid, const pg_stat_t &s, num_pg++; num_pg_by_state[s.state]++; - if (s.state & PG_STATE_CREATING) { + if ((s.state & PG_STATE_CREATING) && + s.parent_split_bits == 0) { creating_pgs.insert(pgid); if (s.acting_primary >= 0) { creating_pgs_by_osd_epoch[s.acting_primary][s.mapping_epoch].insert(pgid); @@ -505,7 +506,8 @@ void PGMap::stat_pg_sub(const pg_t &pgid, const pg_stat_t &s, if (end == 0) num_pg_by_state.erase(s.state); - if (s.state & PG_STATE_CREATING) { + if ((s.state & PG_STATE_CREATING) && + s.parent_split_bits == 0) { creating_pgs.erase(pgid); if (s.acting_primary >= 0) { map >& r = creating_pgs_by_osd_epoch[s.acting_primary]; diff --git a/src/mon/PGMonitor.cc b/src/mon/PGMonitor.cc index 66f84e330bc..561e5909b9f 100644 --- a/src/mon/PGMonitor.cc +++ b/src/mon/PGMonitor.cc @@ -1252,11 +1252,12 @@ epoch_t PGMonitor::send_pg_creates(int osd, Connection *con, epoch_t next) << dendl; last = q->first; for (set::iterator r = q->second.begin(); r != q->second.end(); ++r) { + pg_stat_t &st = pg_map.pg_stat[*r]; if (!m) m = new MOSDPGCreate(pg_map.last_osdmap_epoch); - m->mkpg[*r] = pg_create_t(pg_map.pg_stat[*r].created, - pg_map.pg_stat[*r].parent, - pg_map.pg_stat[*r].parent_split_bits); + m->mkpg[*r] = pg_create_t(st.created, + st.parent, + st.parent_split_bits); // Need the create time from the monitor using its clock to set // last_scrub_stamp upon pg creation. m->ctimes[*r] = pg_map.pg_stat[*r].last_scrub_stamp;