librbd: Fixed bug in disabling non-primary image mirroring

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>
This commit is contained in:
Ricardo Dias 2016-04-08 21:40:20 +01:00
parent 0913938d41
commit b6d8c32ae8

View 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);