summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Farnum <greg@inktank.com>2013-10-22 16:52:18 -0700
committerGreg Farnum <greg@inktank.com>2013-10-22 16:52:18 -0700
commit65cc4c7981c596dd7e614177f8029d10c1c5f40e (patch)
treea608fbc592f9e7cdb2e5f5b15635238922d3c7bb
parentf1cc48d76f0900ba4de743ec956350b87da61338 (diff)
downloadceph-65cc4c7981c596dd7e614177f8029d10c1c5f40e.tar.gz
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 <greg@inktank.com>
-rw-r--r--src/osd/PG.cc1
-rw-r--r--src/osd/ReplicatedPG.cc1
2 files changed, 2 insertions, 0 deletions
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