uint64_t src_size;
{
RWLock::RLocker snap_locker(src->snap_lock);
- features = src->features;
+ features = (src->features & ~RBD_FEATURES_IMPLICIT_ENABLE);
src_size = src->get_image_size(src->snap_id);
}
uint64_t format = 2;
lderr(cct) << "librbd does not support requested features." << dendl;
return -ENOSYS;
}
+ if ((features & RBD_FEATURES_INTERNAL) != 0) {
+ lderr(cct) << "cannot use internally controlled features" << dendl;
+ return -EINVAL;
+ }
if ((features & RBD_FEATURE_FAST_DIFF) != 0 &&
(features & RBD_FEATURE_OBJECT_MAP) == 0) {
lderr(cct) << "cannot use fast diff without object map" << dendl;
int order = m_src_ictx->order;
uint64_t features;
ASSERT_EQ(0, librbd::get_features(m_src_ictx, &features));
+ features &= ~RBD_FEATURES_IMPLICIT_ENABLE;
+
std::cout << "clone " << m_src_ictx->name << " -> " << clone_name
<< std::endl;
ASSERT_EQ(0, librbd::clone(m_ioctx, m_src_ictx->name.c_str(),
m_local_image_id = librbd::util::generate_image_id(m_local_io_ctx);
librbd::ImageOptions image_opts;
- image_opts.set(RBD_IMAGE_OPTION_FEATURES, RBD_FEATURES_ALL);
+ image_opts.set(RBD_IMAGE_OPTION_FEATURES,
+ (RBD_FEATURES_ALL & ~RBD_FEATURES_IMPLICIT_ENABLE));
EXPECT_EQ(0, librbd::create(m_local_io_ctx, m_image_name, m_local_image_id,
1 << 20, image_opts, GLOBAL_IMAGE_ID,
m_remote_mirror_uuid, true));
int TestFixture::create_image(librbd::RBD &rbd, librados::IoCtx &ioctx,
const std::string &name, uint64_t size) {
int order = 18;
- return rbd.create2(ioctx, name.c_str(), size, RBD_FEATURES_ALL, &order);
+ return rbd.create2(ioctx, name.c_str(), size,
+ (RBD_FEATURES_ALL & ~RBD_FEATURES_IMPLICIT_ENABLE),
+ &order);
}
int TestFixture::open_image(librados::IoCtx &io_ctx,