From 65cc4c7981c596dd7e614177f8029d10c1c5f40e Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Tue, 22 Oct 2013 16:52:18 -0700 Subject: PG: clear out the waiting_for_missing_object list properly We were previously not erasing empty entries, which was confusing the rw_manager recovery locking. Signed-off-by: Greg Farnum --- src/osd/PG.cc | 1 + src/osd/ReplicatedPG.cc | 1 + 2 files changed, 2 insertions(+) diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 539fb3284cb..a2d33975682 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -404,6 +404,7 @@ bool PG::search_for_missing(const pg_info_t &oinfo, const pg_missing_t *omissing if (wmo != waiting_for_missing_object.end()) { get_pgbackend()->get_parent()->drop_object_recovery_locks(wmo->first); requeue_ops(wmo->second); + waiting_for_missing_object.erase(wmo); } stats_updated = true; missing_loc[soid].insert(fromosd); diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index b6e3a0de3cd..6d0642ee4c6 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -7079,6 +7079,7 @@ ObjectContextRef ReplicatedPG::mark_object_lost(ObjectStore::Transaction *t, if (wmo != waiting_for_missing_object.end()) { drop_object_recovery_locks(wmo->first); requeue_ops(wmo->second); + waiting_for_missing_object.erase(wmo); } // Add log entry -- cgit v1.2.1