int rbd_clone(rados_ioctx_t p_ioctx, const char *p_name,
const char *p_snapname, rados_ioctx_t c_ioctx,
const char *c_name, uint64_t features, int *c_order);
+int rbd_clone2(rados_ioctx_t p_ioctx, const char *p_name,
+ const char *p_snapname, rados_ioctx_t c_ioctx,
+ const char *c_name, uint64_t features, int *c_order,
+ uint64_t stripe_unit, int stripe_count);
int rbd_remove(rados_ioctx_t io, const char *name);
int rbd_remove_with_progress(rados_ioctx_t io, const char *name,
librbd_progress_fn_t cb, void *cbdata);
int clone(IoCtx& p_ioctx, const char *p_name, const char *p_snapname,
IoCtx& c_ioctx, const char *c_name, uint64_t features,
int *c_order);
+ int clone2(IoCtx& p_ioctx, const char *p_name, const char *p_snapname,
+ IoCtx& c_ioctx, const char *c_name, uint64_t features,
+ int *c_order, uint64_t stripe_unit, int stripe_count);
int remove(IoCtx& io_ctx, const char *name);
int remove_with_progress(IoCtx& io_ctx, const char *name, ProgressContext& pctx);
int rename(IoCtx& src_io_ctx, const char *srcname, const char *destname);
*/
int clone(IoCtx& p_ioctx, const char *p_name, const char *p_snap_name,
IoCtx& c_ioctx, const char *c_name,
- uint64_t features, int *c_order)
+ uint64_t features, int *c_order,
+ uint64_t stripe_unit, int stripe_count)
{
CephContext *cct = (CephContext *)p_ioctx.cct();
ldout(cct, 20) << "clone " << &p_ioctx << " name " << p_name << " snap "
<< p_snap_name << "to child " << &c_ioctx << " name "
<< c_name << " features = " << features << " order = "
- << *c_order << dendl;
+ << *c_order
+ << " stripe_unit = " << stripe_unit
+ << " stripe_count = " << stripe_count
+ << dendl;
if (features & ~RBD_FEATURES_ALL) {
lderr(cct) << "librbd does not support requested features" << dendl;
if (!order)
order = p_imctx->order;
- r = create(c_ioctx, c_name, size, false, features, &order, p_imctx->stripe_unit, p_imctx->stripe_count);
+ r = create(c_ioctx, c_name, size, false, features, &order, stripe_unit, stripe_count);
if (r < 0) {
lderr(cct) << "error creating child: " << cpp_strerror(r) << dendl;
goto err_close_parent;
uint64_t stripe_unit, uint64_t stripe_count);
int clone(IoCtx& p_ioctx, const char *p_name, const char *p_snap_name,
IoCtx& c_ioctx, const char *c_name,
- uint64_t features, int *c_order);
+ uint64_t features, int *c_order,
+ uint64_t stripe_unit, int stripe_count);
int rename(librados::IoCtx& io_ctx, const char *srcname, const char *dstname);
int info(ImageCtx *ictx, image_info_t& info, size_t image_size);
int get_old_format(ImageCtx *ictx, uint8_t *old);
int *c_order)
{
return librbd::clone(p_ioctx, p_name, p_snap_name, c_ioctx, c_name,
- features, c_order);
+ features, c_order, 0, 0);
+ }
+
+ int RBD::clone2(IoCtx& p_ioctx, const char *p_name, const char *p_snap_name,
+ IoCtx& c_ioctx, const char *c_name, uint64_t features,
+ int *c_order, uint64_t stripe_unit, int stripe_count)
+ {
+ return librbd::clone(p_ioctx, p_name, p_snap_name, c_ioctx, c_name,
+ features, c_order, stripe_unit, stripe_count);
}
int RBD::remove(IoCtx& io_ctx, const char *name)
librados::IoCtx::from_rados_ioctx_t(p_ioctx, p_ioc);
librados::IoCtx::from_rados_ioctx_t(c_ioctx, c_ioc);
return librbd::clone(p_ioc, p_name, p_snap_name, c_ioc, c_name,
- features, c_order);
+ features, c_order, 0, 0);
+}
+
+extern "C" int rbd_clone2(rados_ioctx_t p_ioctx, const char *p_name,
+ const char *p_snap_name, rados_ioctx_t c_ioctx,
+ const char *c_name, uint64_t features, int *c_order,
+ uint64_t stripe_unit, int stripe_count)
+{
+ librados::IoCtx p_ioc, c_ioc;
+ librados::IoCtx::from_rados_ioctx_t(p_ioctx, p_ioc);
+ librados::IoCtx::from_rados_ioctx_t(c_ioctx, c_ioc);
+ return librbd::clone(p_ioc, p_name, p_snap_name, c_ioc, c_name,
+ features, c_order, stripe_unit, stripe_count);
}
extern "C" int rbd_remove(rados_ioctx_t p, const char *name)