From 82838e340e0ab7c593618f5807ea5868ecd6bc48 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Mon, 2 May 2016 15:06:51 -0400 Subject: [PATCH] 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 (cherry picked from commit f24c70f54343aa6698af8ac1f0774282b0659968) --- src/librbd/internal.cc | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) 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 @@ 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); @@ -1343,7 +1345,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); @@ -1360,10 +1361,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; -- 2.39.5