diff --git a/src/librbd/internal.cc b/src/librbd/internal.cc index 365e7918a6149..ba826e94193e4 100644 --- a/src/librbd/internal.cc +++ b/src/librbd/internal.cc @@ -1233,6 +1233,8 @@ int mirror_image_disable_internal(ImageCtx *ictx, bool force) { ImageOptions& opts) { CephContext *cct = (CephContext *)io_ctx.cct(); + ldout(cct, 10) << __func__ << " name=" << imgname << ", " + << "size=" << size << ", opts=" << opts << dendl; uint64_t format = cct->_conf->rbd_default_format; opts.get(RBD_IMAGE_OPTION_FORMAT, &format); @@ -1343,7 +1345,6 @@ int mirror_image_disable_internal(ImageCtx *ictx, bool force) { uint64_t order = *c_order; ImageOptions opts; - opts.set(RBD_IMAGE_OPTION_FORMAT, static_cast(2)); opts.set(RBD_IMAGE_OPTION_FEATURES, features); opts.set(RBD_IMAGE_OPTION_ORDER, order); opts.set(RBD_IMAGE_OPTION_STRIPE_UNIT, stripe_unit); @@ -1360,10 +1361,16 @@ int mirror_image_disable_internal(ImageCtx *ictx, bool force) { { CephContext *cct = (CephContext *)p_ioctx.cct(); ldout(cct, 20) << "clone " << &p_ioctx << " name " << p_name << " snap " - << p_snap_name << "to child " << &c_ioctx << " name " + << p_snap_name << " to child " << &c_ioctx << " name " << c_name << " opts = " << c_opts << dendl; - uint64_t format = cct->_conf->rbd_default_format; + bool default_format_set; + c_opts.is_set(RBD_IMAGE_OPTION_FORMAT, &default_format_set); + if (!default_format_set) { + c_opts.set(RBD_IMAGE_OPTION_FORMAT, static_cast(2)); + } + + uint64_t format = 0; c_opts.get(RBD_IMAGE_OPTION_FORMAT, &format); if (format < 2) { lderr(cct) << "format 2 or later required for clone" << dendl;