From: Zhiqiang Wang Date: Tue, 24 Mar 2015 08:00:16 +0000 (+0800) Subject: osd/ReplicatedPG: don't check order in finish_proxy_read X-Git-Tag: v0.94.2~44^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0ee022b1ae832c70a80e9d2cdf32403039f3f125;p=ceph.git osd/ReplicatedPG: don't check order in finish_proxy_read Read doesn't need to be ordered. So when proxy read comes back from base tier, it's not necessarily at the front of the in progress list. Fixes: #11211 Signed-off-by: Zhiqiang Wang (cherry picked from commit 560a5839c0d1852b5816937b845b60390777636c) --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 4e001921319a..479664fef577 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -2060,9 +2060,12 @@ void ReplicatedPG::finish_proxy_read(hobject_t oid, ceph_tid_t tid, int r) return; } assert(q->second.size()); - OpRequestRef op = q->second.front(); - assert(op == prdop->op); - q->second.pop_front(); + list::iterator it = std::find(q->second.begin(), + q->second.end(), + prdop->op); + assert(it != q->second.end()); + OpRequestRef op = *it; + q->second.erase(it); if (q->second.size() == 0) { in_progress_proxy_reads.erase(oid); }