From: Jason Dillaman Date: Mon, 2 May 2016 19:06:51 +0000 (-0400) Subject: librbd: default clone operation to image format 2 X-Git-Tag: v11.0.0~761^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F8883%2Fhead;p=ceph.git librbd: default clone operation to image format 2 Image format 1 doesn't support clones, so unless the user overrode the setting, default to format 2. Fixes: http://tracker.ceph.com/issues/15685 Signed-off-by: Jason Dillaman --- diff --git a/src/librbd/internal.cc b/src/librbd/internal.cc index 8a5161f4a96a..455d3b35eb4c 100644 --- a/src/librbd/internal.cc +++ b/src/librbd/internal.cc @@ -1234,6 +1234,8 @@ remove_mirroring_image: 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); @@ -1344,7 +1346,6 @@ remove_mirroring_image: 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); @@ -1361,10 +1362,16 @@ remove_mirroring_image: { 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;