From b3224a18f6acc7ed54c2162b140a33b6146a16be Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Fri, 11 Nov 2016 21:37:50 +0800 Subject: [PATCH] ReplicatedPG::failed_push: release read lock on failure and requeue the blocked ops. Fixes: http://tracker.ceph.com/issues/17857 Signed-off-by: Kefu Chai --- src/osd/ReplicatedPG.cc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 160f95dd9fd..8a8b5870ecb 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -9845,7 +9845,14 @@ void ReplicatedPG::recover_got(hobject_t oid, eversion_t v) void ReplicatedPG::failed_push(const list &from, const hobject_t &soid) { + dout(20) << __func__ << ": " << soid << dendl; assert(recovering.count(soid)); + auto obc = recovering[soid]; + if (obc) { + list blocked_ops; + obc->drop_recovery_read(&blocked_ops); + requeue_ops(blocked_ops); + } recovering.erase(soid); for (auto&& i : from) missing_loc.remove_location(soid, i); -- 2.39.5