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;
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;