// vim: ts=8 sw=2 smarttab
#include <cstdarg>
+#include <cstring>
#include "common/ceph_context.h"
#include "common/ceph_releases.h"
#include "common/config.h"
const char *name,
bufferlist *inbl)
{
- return 0;
+ OSDOp op;
+ op.op.op = CEPH_OSD_OP_SETXATTR;
+ op.op.xattr.name_len = std::strlen(name);
+ op.op.xattr.value_len = inbl->length();
+ op.indata.append(name, op.op.xattr.name_len);
+ op.indata.append(*inbl);
+ try {
+ reinterpret_cast<ceph::osd::OpsExecuter*>(hctx)->do_osd_op(op).get();
+ return 0;
+ } catch (ceph::osd::error& e) {
+ return -e.code().value();
+ }
}
int cls_cxx_snap_revert(cls_method_context_t hctx, snapid_t snapid)
if (local_conf()->osd_max_attr_size > 0 &&
osd_op.op.xattr.value_len > local_conf()->osd_max_attr_size) {
- throw ceph::osd::error::from_intret(-EFBIG);
+ throw ceph::osd::make_error(-EFBIG);
}
const auto max_name_len = std::min<uint64_t>(
store->get_max_attr_name_length(), local_conf()->osd_max_attr_name_len);
if (osd_op.op.xattr.name_len > max_name_len) {
- throw ceph::osd::error::from_intret(-ENAMETOOLONG);
+ throw ceph::osd::make_error(-ENAMETOOLONG);
}
maybe_create_new_object(os, txn);