From 0510301845b9041ef813893b81b70bd4b286e97b Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Wed, 30 Mar 2016 16:13:51 -0400 Subject: [PATCH] objclass: add cls_cxx_read2/cls_cxx_write2 These new methods support passing op flags (e.g. cache hints). Signed-off-by: Jason Dillaman --- src/objclass/class_api.cc | 14 ++++++++++++++ src/objclass/objclass.h | 4 ++++ 2 files changed, 18 insertions(+) diff --git a/src/objclass/class_api.cc b/src/objclass/class_api.cc index 1dd05c20869..d0d0827690a 100644 --- a/src/objclass/class_api.cc +++ b/src/objclass/class_api.cc @@ -268,6 +268,12 @@ int cls_cxx_stat2(cls_method_context_t hctx, uint64_t *size, ceph::real_time *mt } int cls_cxx_read(cls_method_context_t hctx, int ofs, int len, bufferlist *outbl) +{ + return cls_cxx_read2(hctx, ofs, len, outbl, 0); +} + +int cls_cxx_read2(cls_method_context_t hctx, int ofs, int len, + bufferlist *outbl, uint32_t op_flags) { ReplicatedPG::OpContext **pctx = (ReplicatedPG::OpContext **)hctx; vector ops(1); @@ -275,6 +281,7 @@ int cls_cxx_read(cls_method_context_t hctx, int ofs, int len, bufferlist *outbl) ops[0].op.op = CEPH_OSD_OP_SYNC_READ; ops[0].op.extent.offset = ofs; ops[0].op.extent.length = len; + ops[0].op.flags = op_flags; ret = (*pctx)->pg->do_osd_ops(*pctx, ops); if (ret < 0) return ret; @@ -283,12 +290,19 @@ int cls_cxx_read(cls_method_context_t hctx, int ofs, int len, bufferlist *outbl) } int cls_cxx_write(cls_method_context_t hctx, int ofs, int len, bufferlist *inbl) +{ + return cls_cxx_write2(hctx, ofs, len, inbl, 0); +} + +int cls_cxx_write2(cls_method_context_t hctx, int ofs, int len, + bufferlist *inbl, uint32_t op_flags) { ReplicatedPG::OpContext **pctx = (ReplicatedPG::OpContext **)hctx; vector ops(1); ops[0].op.op = CEPH_OSD_OP_WRITE; ops[0].op.extent.offset = ofs; ops[0].op.extent.length = len; + ops[0].op.flags = op_flags; ops[0].indata = *inbl; return (*pctx)->pg->do_osd_ops(*pctx, ops); } diff --git a/src/objclass/objclass.h b/src/objclass/objclass.h index 08a9d238202..8bc3a0a6eae 100644 --- a/src/objclass/objclass.h +++ b/src/objclass/objclass.h @@ -145,7 +145,11 @@ extern int cls_cxx_remove(cls_method_context_t hctx); extern int cls_cxx_stat(cls_method_context_t hctx, uint64_t *size, time_t *mtime); extern int cls_cxx_stat2(cls_method_context_t hctx, uint64_t *size, ceph::real_time *mtime); extern int cls_cxx_read(cls_method_context_t hctx, int ofs, int len, bufferlist *bl); +extern int cls_cxx_read2(cls_method_context_t hctx, int ofs, int len, + bufferlist *bl, uint32_t op_flags); extern int cls_cxx_write(cls_method_context_t hctx, int ofs, int len, bufferlist *bl); +extern int cls_cxx_write2(cls_method_context_t hctx, int ofs, int len, + bufferlist *bl, uint32_t op_flags); extern int cls_cxx_write_full(cls_method_context_t hctx, bufferlist *bl); extern int cls_cxx_getxattr(cls_method_context_t hctx, const char *name, bufferlist *outbl); -- 2.39.5