From: Wanlong Gao Date: Tue, 28 Jun 2016 07:51:52 +0000 (+0800) Subject: OSD: split out handle_pg_scrub() from handle_scrub() X-Git-Tag: ses5-milestone5~385^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c96fbd5039ccdea43f50d619d7ccf0caade0f63a;p=ceph.git OSD: split out handle_pg_scrub() from handle_scrub() Signed-off-by: Wanlong Gao --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 15e85ccedce8..89a4cc3e4c2c 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -6333,6 +6333,20 @@ void OSD::_dispatch(Message *m) } +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; @@ -6348,38 +6362,16 @@ void OSD::handle_scrub(MOSDScrub *m) if (m->scrub_pgs.empty()) { for (ceph::unordered_map::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::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]); } } diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 2b7fe220e097..189755701c8f 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -2457,6 +2457,7 @@ private: 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);