From 502cc6140667ada0bae3886885c99e3aaca7f5ed Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Mon, 14 Apr 2014 11:07:58 -0700 Subject: [PATCH] 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 --- src/osd/ReplicatedPG.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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); -- 2.47.3