From 0ee022b1ae832c70a80e9d2cdf32403039f3f125 Mon Sep 17 00:00:00 2001 From: Zhiqiang Wang Date: Tue, 24 Mar 2015 16:00:16 +0800 Subject: [PATCH] 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) --- src/osd/ReplicatedPG.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 4e001921319..479664fef57 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); } -- 2.47.3