From 5175851af271fad93f4363a6b32c6e3924fe5ac1 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Fri, 24 Jun 2011 11:03:34 -0700 Subject: [PATCH] ReplicatedPG: make sure that rollback target is not degraded Signed-off-by: Samuel Just --- src/osd/ReplicatedPG.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 6b5dbec038d5d..841637d055645 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -2063,7 +2063,12 @@ int ReplicatedPG::_rollback_to(OpContext *ctx, ceph_osd_op& op) } } else { //we got our context, let's use it to do the rollback! sobject_t& rollback_to_sobject = rollback_to->obs.oi.soid; - if (rollback_to->obs.oi.soid.snap == CEPH_NOSNAP) { + if (is_degraded_object(rollback_to_sobject)) { + dout(20) << "_rollback_to attempted to roll back to a degraded object " + << rollback_to_sobject << " (requested snapid: ) " << snapid << dendl; + wait_for_degraded_object(rollback_to_sobject, ctx->op); + ret = -EAGAIN; + } else if (rollback_to->obs.oi.soid.snap == CEPH_NOSNAP) { // rolling back to the head; we just need to clone it. ctx->modify = true; } else { -- 2.39.5