From: Samuel Just Date: Mon, 14 Apr 2014 18:07:58 +0000 (-0700) Subject: ReplicatedPG::agent_work: skip hitset objects before getting object context X-Git-Tag: v0.80-rc1~28^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=502cc6140667ada0bae3886885c99e3aaca7f5ed;p=ceph.git ReplicatedPG::agent_work: skip hitset objects before getting object context Otherwise, we might read the attr on a hitset object we are in the process of deleting. Fixes: #8086 Signed-off-by: Samuel Just --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 8910e00d7c5c..70a878442d75 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -10763,6 +10763,11 @@ void ReplicatedPG::agent_work(int start_max) for (vector::iterator p = ls.begin(); p != ls.end(); ++p) { + if (p->nspace == cct->_conf->osd_hit_set_namespace) { + dout(20) << __func__ << " skip (hit set) " << *p << dendl; + osd->logger->inc(l_osd_agent_skip); + continue; + } if (is_degraded_object(*p)) { dout(20) << __func__ << " skip (degraded) " << *p << dendl; osd->logger->inc(l_osd_agent_skip); @@ -10785,11 +10790,6 @@ void ReplicatedPG::agent_work(int start_max) osd->logger->inc(l_osd_agent_skip); continue; } - if (obc->obs.oi.soid.nspace == cct->_conf->osd_hit_set_namespace) { - dout(20) << __func__ << " skip (hit set) " << obc->obs.oi << dendl; - osd->logger->inc(l_osd_agent_skip); - continue; - } if (obc->is_blocked()) { dout(20) << __func__ << " skip (blocked) " << obc->obs.oi << dendl; osd->logger->inc(l_osd_agent_skip);