]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
librbd: Fixed bug in disabling non-primary image mirroring
authorRicardo Dias <rdias@suse.com>
Fri, 8 Apr 2016 20:40:20 +0000 (21:40 +0100)
committerRicardo Dias <rdias@suse.com>
Mon, 11 Apr 2016 13:50:30 +0000 (14:50 +0100)
It is only possible to remove image from rbd_mirroring object if the
mirroring image state is set to DISABLING.

Signed-off-by: Ricardo Dias <rdias@suse.com>
src/librbd/internal.cc

index 2abc1a2559b7815e84761ce3d8bd58a245ed186b..983e622b9da917bd16eb185714f62c7a9e1a9022 100644 (file)
@@ -312,13 +312,10 @@ int mirror_image_disable_internal(ImageCtx *ictx, bool force) {
     return r;
   }
 
-  if (!is_primary) {
-    if (!force) {
-      lderr(cct) << "Mirrored image is not the primary, add force option to"
-        " disable mirroring" << dendl;
-      return -EINVAL;
-    }
-    goto remove_mirroring_image;
+  if (!is_primary && !force) {
+    lderr(cct) << "Mirrored image is not the primary, add force option to"
+                  " disable mirroring" << dendl;
+    return -EINVAL;
   }
 
   mirror_image_internal.state = cls::rbd::MIRROR_IMAGE_STATE_DISABLING;
@@ -329,6 +326,10 @@ int mirror_image_disable_internal(ImageCtx *ictx, bool force) {
     return r;
   }
 
+  if (!is_primary) {
+    goto remove_mirroring_image;
+  }
+
   r = MirroringWatcher<>::notify_image_updated(
     ictx->md_ctx, cls::rbd::MIRROR_IMAGE_STATE_DISABLING,
     ictx->id, mirror_image_internal.global_image_id);