From 3dd5249b6a665bfef7fafccc85b560b0ea1ef784 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Fri, 1 Apr 2016 12:08:12 -0400 Subject: [PATCH] librbd: avoid throwing error if mirroring is unsupported Attempting to remove an image will remove the image from the mirroring directory. However, if the OSD is older and doesn't support this new feature, avoid throwing an error. Signed-off-by: Jason Dillaman --- src/librbd/internal.cc | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/librbd/internal.cc b/src/librbd/internal.cc index 23fe70f182d88..6ace24f1d8f80 100644 --- a/src/librbd/internal.cc +++ b/src/librbd/internal.cc @@ -291,14 +291,17 @@ int mirror_image_disable_internal(ImageCtx *ictx, bool force) { int r = cls_client::mirror_image_get(&ictx->md_ctx, ictx->id, &mirror_image_internal); - if (r < 0 && r != -ENOENT) { - lderr(cct) << "cannot disable mirroring: " << cpp_strerror(r) << dendl; - return r; - } else if (r == -ENOENT) { + if (r == -ENOENT) { // mirroring is not enabled for this image ldout(cct, 20) << "ignoring disable command: mirroring is not enabled " "for this image" << dendl; return 0; + } else if (r == -EOPNOTSUPP) { + ldout(cct, 5) << "mirroring not supported by OSD" << dendl; + return r; + } else if (r < 0) { + lderr(cct) << "cannot disable mirroring: " << cpp_strerror(r) << dendl; + return r; } bool is_primary; @@ -1960,7 +1963,7 @@ remove_mirroring_image: if (!old_format) { r = mirror_image_disable_internal(ictx, false); - if (r < 0) { + if (r < 0 && r != -EOPNOTSUPP) { lderr(cct) << "error disabling image mirroring: " << cpp_strerror(r) << dendl; ictx->owner_lock.put_read(); -- 2.39.5