From: Jason Dillaman Date: Wed, 27 Jul 2016 12:23:09 +0000 (-0400) Subject: Merge pull request #9334 from yangdongsheng/rbd_clone_hiberit X-Git-Tag: ses5-milestone5~281 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=bdeef717dce8bce23f5ee3fdf0f21edf7d3a7c94;p=ceph.git Merge pull request #9334 from yangdongsheng/rbd_clone_hiberit rbd: inherit the parent image features when cloning an image Reviewed-by: Jason Dillaman --- bdeef717dce8bce23f5ee3fdf0f21edf7d3a7c94 diff --cc src/librbd/internal.cc index be2423559269,f082e0839f1f..5e6f42c63c09 --- a/src/librbd/internal.cc +++ b/src/librbd/internal.cc @@@ -1573,23 -1504,8 +1591,23 @@@ int mirror_image_disable_internal(Image return -EINVAL; } + if ((p_features & RBD_FEATURE_JOURNALING) != 0) { + bool force_non_primary = !non_primary_global_image_id.empty(); + bool is_primary; + int r = Journal<>::is_tag_owner(p_imctx, &is_primary); + if (r < 0) { + lderr(cct) << "failed to determine tag ownership: " << cpp_strerror(r) + << dendl; + return r; + } + if (!is_primary && !force_non_primary) { + lderr(cct) << "parent is non-primary mirrored image" << dendl; + return -EINVAL; + } + } + if (use_p_features) { - c_opts.set(RBD_IMAGE_OPTION_FEATURES, p_features); + features = p_features; } order = p_imctx->order; diff --cc src/tools/rbd/action/Import.cc index c87d4021b78c,a935c38b79f8..4fd9a36eef56 --- a/src/tools/rbd/action/Import.cc +++ b/src/tools/rbd/action/Import.cc @@@ -126,33 -127,11 +127,12 @@@ static int do_import(librbd::RBD &rbd, assert(bdev_size >= 0); size = (uint64_t) bdev_size; } - +#ifdef HAVE_POSIX_FADVISE posix_fadvise(fd, 0, 0, POSIX_FADV_SEQUENTIAL); +#endif } - uint64_t format; - r = opts.get(RBD_IMAGE_OPTION_FORMAT, &format); - assert(r == 0); - if (format == 1) { - uint64_t stripe_unit, stripe_count; - r = opts.get(RBD_IMAGE_OPTION_STRIPE_UNIT, &stripe_unit); - assert(r == 0); - r = opts.get(RBD_IMAGE_OPTION_STRIPE_COUNT, &stripe_count); - assert(r == 0); - - // weird striping not allowed with format 1! - if ((stripe_unit || stripe_count) && - (stripe_unit != (1ull << order) && stripe_count != 1)) { - std::cerr << "non-default striping not allowed with format 1; " - << "use --image-format 2" << std::endl; - return -EINVAL; - } - int order_ = order; - r = rbd.create(io_ctx, imgname, size, &order_); - } else { - r = rbd.create4(io_ctx, imgname, size, opts); - } + r = rbd.create4(io_ctx, imgname, size, opts); if (r < 0) { std::cerr << "rbd: image creation failed" << std::endl; goto done;