}
+void OSD::handle_pg_scrub(MOSDScrub *m, PG *pg)
+{
+ pg->lock();
+ if (pg->is_primary()) {
+ pg->unreg_next_scrub();
+ pg->scrubber.must_scrub = true;
+ pg->scrubber.must_deep_scrub = m->deep || m->repair;
+ pg->scrubber.must_repair = m->repair;
+ pg->reg_next_scrub();
+ dout(10) << "marking " << *pg << " for scrub" << dendl;
+ }
+ pg->unlock();
+}
+
void OSD::handle_scrub(MOSDScrub *m)
{
dout(10) << "handle_scrub " << *m << dendl;
if (m->scrub_pgs.empty()) {
for (ceph::unordered_map<spg_t, PG*>::iterator p = pg_map.begin();
p != pg_map.end();
- ++p) {
- PG *pg = p->second;
- pg->lock();
- if (pg->is_primary()) {
- pg->unreg_next_scrub();
- pg->scrubber.must_scrub = true;
- pg->scrubber.must_deep_scrub = m->deep || m->repair;
- pg->scrubber.must_repair = m->repair;
- pg->reg_next_scrub();
- dout(10) << "marking " << *pg << " for scrub" << dendl;
- }
- pg->unlock();
- }
+ ++p)
+ handle_pg_scrub(m, p->second);
} else {
for (vector<pg_t>::iterator p = m->scrub_pgs.begin();
p != m->scrub_pgs.end();
++p) {
spg_t pcand;
if (osdmap->get_primary_shard(*p, &pcand) &&
- pg_map.count(pcand)) {
- PG *pg = pg_map[pcand];
- pg->lock();
- if (pg->is_primary()) {
- pg->unreg_next_scrub();
- pg->scrubber.must_scrub = true;
- pg->scrubber.must_deep_scrub = m->deep || m->repair;
- pg->scrubber.must_repair = m->repair;
- pg->reg_next_scrub();
- dout(10) << "marking " << *pg << " for scrub" << dendl;
- }
- pg->unlock();
- }
+ pg_map.count(pcand))
+ handle_pg_scrub(m, pg_map[pcand]);
}
}
static int write_meta(ObjectStore *store,
uuid_d& cluster_fsid, uuid_d& osd_fsid, int whoami);
+ void handle_pg_scrub(struct MOSDScrub *m, PG* pg);
void handle_scrub(struct MOSDScrub *m);
void handle_osd_ping(class MOSDPing *m);
void handle_op(OpRequestRef& op, OSDMapRef& osdmap);