#include "librbd/image/DetachParentRequest.h"
#include "librbd/image/ListWatchersRequest.h"
#include "librbd/image/RemoveRequest.h"
+#include "librbd/image/Types.h"
#include "librbd/internal.h"
#include "librbd/io/ImageRequestWQ.h"
#include "librbd/mirror/DisableRequest.h"
if (parent_spec.pool_id == -1) {
auto *req = image::CreateRequest<I>::create(
config, m_dst_io_ctx, m_dst_image_name, m_dst_image_id, size,
- m_image_options, true /* skip_mirror_enable */,
+ m_image_options, image::CREATE_FLAG_SKIP_MIRROR_ENABLE,
cls::rbd::MIRROR_IMAGE_MODE_JOURNAL, "", "", op_work_queue, &on_create);
req->send();
} else {
#include "librbd/image/CloneRequest.h"
#include "librbd/image/CreateRequest.h"
#include "librbd/image/RemoveRequest.h"
+#include "librbd/image/Types.h"
#include "librbd/mirror/EnableRequest.h"
#define dout_subsys ceph_subsys_rbd
Context *ctx = create_context_callback<
klass, &klass::handle_create_child>(this);
- CreateRequest<I> *req = CreateRequest<I>::create(
- m_config, m_ioctx, m_name, m_id, m_size, m_opts, true,
+ auto req = CreateRequest<I>::create(
+ m_config, m_ioctx, m_name, m_id, m_size, m_opts,
+ image::CREATE_FLAG_SKIP_MIRROR_ENABLE,
cls::rbd::MIRROR_IMAGE_MODE_JOURNAL, m_non_primary_global_image_id,
m_primary_mirror_uuid, m_op_work_queue, ctx);
req->send();
#include "librbd/Journal.h"
#include "librbd/ObjectMap.h"
#include "librbd/Utils.h"
+#include "librbd/image/Types.h"
#include "librbd/image/ValidatePoolRequest.h"
#include "librbd/journal/CreateRequest.h"
#include "librbd/journal/RemoveRequest.h"
const std::string &image_name,
const std::string &image_id, uint64_t size,
const ImageOptions &image_options,
- bool skip_mirror_enable,
+ uint32_t create_flags,
cls::rbd::MirrorImageMode mirror_image_mode,
const std::string &non_primary_global_image_id,
const std::string &primary_mirror_uuid,
ContextWQ *op_work_queue, Context *on_finish)
: m_config(config), m_image_name(image_name), m_image_id(image_id),
- m_size(size), m_skip_mirror_enable(skip_mirror_enable),
+ m_size(size), m_create_flags(create_flags),
m_mirror_image_mode(mirror_image_mode),
m_non_primary_global_image_id(non_primary_global_image_id),
m_primary_mirror_uuid(primary_mirror_uuid),
template<typename I>
void CreateRequest<I>::mirror_image_enable() {
if (((m_mirror_mode != cls::rbd::MIRROR_MODE_POOL) && !m_force_non_primary) ||
- m_skip_mirror_enable) {
+ ((m_create_flags & CREATE_FLAG_MIRROR_ENABLE_MASK) ==
+ CREATE_FLAG_SKIP_MIRROR_ENABLE)) {
complete(0);
return;
}
const std::string &image_name,
const std::string &image_id, uint64_t size,
const ImageOptions &image_options,
- bool skip_mirror_enable,
+ uint32_t create_flags,
cls::rbd::MirrorImageMode mirror_image_mode,
const std::string &non_primary_global_image_id,
const std::string &primary_mirror_uuid,
ContextWQ *op_work_queue, Context *on_finish) {
return new CreateRequest(config, ioctx, image_name, image_id, size,
- image_options, skip_mirror_enable,
+ image_options, create_flags,
mirror_image_mode, non_primary_global_image_id,
primary_mirror_uuid, op_work_queue, on_finish);
}
const std::string &image_name,
const std::string &image_id, uint64_t size,
const ImageOptions &image_options,
- bool skip_mirror_enable,
+ uint32_t create_flags,
cls::rbd::MirrorImageMode mirror_image_mode,
const std::string &non_primary_global_image_id,
const std::string &primary_mirror_uuid,
std::string m_journal_pool;
std::string m_data_pool;
int64_t m_data_pool_id = -1;
- bool m_skip_mirror_enable;
+ uint32_t m_create_flags;
cls::rbd::MirrorImageMode m_mirror_image_mode;
const std::string m_non_primary_global_image_id;
const std::string m_primary_mirror_uuid;
--- /dev/null
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#ifndef LIBRBD_IMAGE_TYPES_H
+#define LIBRBD_IMAGE_TYPES_H
+
+namespace librbd {
+namespace image {
+
+enum {
+ CREATE_FLAG_SKIP_MIRROR_ENABLE = 1 << 0,
+ CREATE_FLAG_FORCE_MIRROR_ENABLE = 1 << 1,
+ CREATE_FLAG_MIRROR_ENABLE_MASK = (CREATE_FLAG_SKIP_MIRROR_ENABLE |
+ CREATE_FLAG_FORCE_MIRROR_ENABLE),
+};
+
+} // namespace image
+} // librbd
+
+#endif // LIBRBD_IMAGE_TYPES_H
#include "librbd/image/CloneRequest.h"
#include "librbd/image/CreateRequest.h"
#include "librbd/image/GetMetadataRequest.h"
+#include "librbd/image/Types.h"
#include "librbd/io/AioCompletion.h"
#include "librbd/io/ImageRequest.h"
#include "librbd/io/ImageRequestWQ.h"
ConfigProxy config{cct->_conf};
api::Config<>::apply_pool_overrides(io_ctx, &config);
+ uint32_t create_flags = 0U;
+ if (skip_mirror_enable) {
+ create_flags = image::CREATE_FLAG_SKIP_MIRROR_ENABLE;
+ }
+
C_SaferCond cond;
image::CreateRequest<> *req = image::CreateRequest<>::create(
- config, io_ctx, image_name, id, size, opts, skip_mirror_enable,
+ config, io_ctx, image_name, id, size, opts, create_flags,
cls::rbd::MIRROR_IMAGE_MODE_JOURNAL, non_primary_global_image_id,
primary_mirror_uuid, op_work_queue, &cond);
req->send();
auto req = librbd::image::CreateRequest<I>::create(
config, m_local_io_ctx, m_local_image_name, m_local_image_id,
- m_remote_image_ctx->size, image_options, false, m_mirror_image_mode,
+ m_remote_image_ctx->size, image_options, 0U, m_mirror_image_mode,
m_global_image_id, m_remote_mirror_uuid, m_remote_image_ctx->op_work_queue,
ctx);
req->send();