}
}
+int cls_cxx_write_zero(cls_method_context_t hctx, int ofs, int len)
+{
+ OSDOp op{CEPH_OSD_OP_ZERO};
+ op.op.extent.offset = ofs;
+ op.op.extent.length = len;
+ try {
+ reinterpret_cast<ceph::osd::OpsExecuter*>(hctx)->execute_osd_op(op).get();
+ return 0;
+ } catch (ceph::osd::error& e) {
+ return -e.code().value();
+ }
+}
+
int cls_cxx_getxattr(cls_method_context_t hctx,
const char *name,
bufferlist *outbl)
extern int cls_cxx_replace(cls_method_context_t hctx, int ofs, int len,
ceph::buffer::list *bl);
extern int cls_cxx_truncate(cls_method_context_t hctx, int ofs);
+extern int cls_cxx_write_zero(cls_method_context_t hctx, int ofs, int len);
extern int cls_cxx_snap_revert(cls_method_context_t hctx, snapid_t snapid);
extern int cls_cxx_map_clear(cls_method_context_t hctx);
extern int cls_cxx_map_get_all_vals(cls_method_context_t hctx,
return (*pctx)->pg->do_osd_ops(*pctx, ops);
}
+int cls_cxx_write_zero(cls_method_context_t hctx, int ofs, int len)
+{
+ PrimaryLogPG::OpContext **pctx = (PrimaryLogPG::OpContext **)hctx;
+ vector<OSDOp> ops(1);
+ ops[0].op.op = CEPH_OSD_OP_ZERO;
+ ops[0].op.extent.offset = ofs;
+ ops[0].op.extent.length = len;
+ return (*pctx)->pg->do_osd_ops(*pctx, ops);
+}
+
int cls_cxx_getxattr(cls_method_context_t hctx, const char *name,
bufferlist *outbl)
{
return ctx->io_ctx_impl->truncate(ctx->oid, ofs, ctx->snapc);
}
+int cls_cxx_write_zero(cls_method_context_t hctx, int ofs, int len) {
+ librados::TestClassHandler::MethodContext *ctx =
+ reinterpret_cast<librados::TestClassHandler::MethodContext*>(hctx);
+ return ctx->io_ctx_impl->zero(ctx->oid, len, ofs, ctx->snapc);
+}
+
int cls_cxx_list_watchers(cls_method_context_t hctx,
obj_list_watch_response_t *watchers) {
librados::TestClassHandler::MethodContext *ctx =