summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Farnum <greg@inktank.com>2013-10-22 14:54:00 -0700
committerGreg Farnum <greg@inktank.com>2013-10-22 14:54:00 -0700
commitecbbbdfc7f6e10ad713d7b5b0db92f5bcef77b0f (patch)
treef6dc12ad3dbf9df90e113b95621844bf080b7cbc
parentf915eec60b32262f2028b83441302dfca1814dd3 (diff)
downloadceph-ecbbbdfc7f6e10ad713d7b5b0db92f5bcef77b0f.tar.gz
ReplicatedPG: take recovery locks in wait_for_missing_object()
Need them here too. Signed-off-by: Greg Farnum <greg@inktank.com>
-rw-r--r--src/osd/ReplicatedPG.cc2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc
index 01dfaea5bbf..e06b7793c42 100644
--- a/src/osd/ReplicatedPG.cc
+++ b/src/osd/ReplicatedPG.cc
@@ -280,6 +280,8 @@ void ReplicatedPG::wait_for_missing_object(const hobject_t& soid, OpRequestRef o
}
else {
dout(7) << "missing " << soid << " v " << v << ", recovering." << dendl;
+ // nobody can have locks on a missing object, so we must be uncontended
+ assert(rw_manager.get_backfill_read(soid));
PGBackend::RecoveryHandle *h = pgbackend->open_recovery_op();
recover_missing(soid, v, cct->_conf->osd_client_op_priority, h);
pgbackend->run_recovery_op(h, cct->_conf->osd_client_op_priority);