From: Jianpeng Ma Date: Thu, 11 Dec 2014 08:56:53 +0000 (+0800) Subject: librbd: add new read/write api for librbd C interface which handle op X-Git-Tag: v0.91~55^2~3^2~18 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5896f99751206cf18ff17a1846169c79749f8e56;p=ceph.git librbd: add new read/write api for librbd C interface which handle op flags. Signed-off-by: Jianpeng Ma --- diff --git a/src/include/rbd/librbd.h b/src/include/rbd/librbd.h index de8d5662f52f..a0ddfd08e077 100644 --- a/src/include/rbd/librbd.h +++ b/src/include/rbd/librbd.h @@ -334,7 +334,11 @@ typedef void *rbd_completion_t; typedef void (*rbd_callback_t)(rbd_completion_t cb, void *arg); CEPH_RBD_API ssize_t rbd_read(rbd_image_t image, uint64_t ofs, size_t len, char *buf); - +/* + * @param op_flags: see librados.h constants beginning with LIBRADOS_OP_FLAG + */ +CEPH_RBD_API ssize_t rbd_read2(rbd_image_t image, uint64_t ofs, size_t len, + char *buf, int op_flags); /* DEPRECATED; use rbd_read_iterate2 */ CEPH_RBD_API int64_t rbd_read_iterate(rbd_image_t image, uint64_t ofs, size_t len, int (*cb)(uint64_t, size_t, const char *, void *), @@ -383,11 +387,27 @@ CEPH_RBD_API int rbd_diff_iterate(rbd_image_t image, void *arg); CEPH_RBD_API ssize_t rbd_write(rbd_image_t image, uint64_t ofs, size_t len, const char *buf); +/* + * @param op_flags: see librados.h constants beginning with LIBRADOS_OP_FLAG + */ +CEPH_RBD_API ssize_t rbd_write2(rbd_image_t image, uint64_t ofs, size_t len, + const char *buf, int op_flags); CEPH_RBD_API int rbd_discard(rbd_image_t image, uint64_t ofs, uint64_t len); CEPH_RBD_API int rbd_aio_write(rbd_image_t image, uint64_t off, size_t len, const char *buf, rbd_completion_t c); + +/* + * @param op_flags: see librados.h constants beginning with LIBRADOS_OP_FLAG + */ +CEPH_RBD_API int rbd_aio_write2(rbd_image_t image, uint64_t off, size_t len, + const char *buf, rbd_completion_t c, int op_flags); CEPH_RBD_API int rbd_aio_read(rbd_image_t image, uint64_t off, size_t len, char *buf, rbd_completion_t c); +/* + * @param op_flags: see librados.h constants beginning with LIBRADOS_OP_FLAG + */ +CEPH_RBD_API int rbd_aio_read2(rbd_image_t image, uint64_t off, size_t len, + char *buf, rbd_completion_t c, int op_flags); CEPH_RBD_API int rbd_aio_discard(rbd_image_t image, uint64_t off, uint64_t len, rbd_completion_t c); CEPH_RBD_API int rbd_aio_create_completion(void *cb_arg, diff --git a/src/librbd/librbd.cc b/src/librbd/librbd.cc index 58870f1f1141..0827caa37442 100644 --- a/src/librbd/librbd.cc +++ b/src/librbd/librbd.cc @@ -1421,6 +1421,18 @@ extern "C" ssize_t rbd_read(rbd_image_t image, uint64_t ofs, size_t len, return r; } +extern "C" ssize_t rbd_read2(rbd_image_t image, uint64_t ofs, size_t len, + char *buf, int op_flags) +{ + librbd::ImageCtx *ictx = (librbd::ImageCtx *)image; + tracepoint(librbd, read2_enter, ictx, ictx->name.c_str(), + ictx->snap_name.c_str(), ictx->read_only, ofs, len, op_flags); + int r = librbd::read(ictx, ofs, len, buf, op_flags); + tracepoint(librbd, read_exit, r); + return r; +} + + extern "C" int64_t rbd_read_iterate(rbd_image_t image, uint64_t ofs, size_t len, int (*cb)(uint64_t, size_t, const char *, void *), void *arg) @@ -1468,6 +1480,18 @@ extern "C" ssize_t rbd_write(rbd_image_t image, uint64_t ofs, size_t len, return r; } +extern "C" ssize_t rbd_write2(rbd_image_t image, uint64_t ofs, size_t len, + const char *buf, int op_flags) +{ + librbd::ImageCtx *ictx = (librbd::ImageCtx *)image; + tracepoint(librbd, write2_enter, ictx, ictx->name.c_str(), + ictx->snap_name.c_str(), ictx->read_only, ofs, len, buf, op_flags); + int r = librbd::write(ictx, ofs, len, buf, op_flags); + tracepoint(librbd, write_exit, r); + return r; +} + + extern "C" int rbd_discard(rbd_image_t image, uint64_t ofs, uint64_t len) { librbd::ImageCtx *ictx = (librbd::ImageCtx *)image; @@ -1499,6 +1523,20 @@ extern "C" int rbd_aio_write(rbd_image_t image, uint64_t off, size_t len, return r; } +extern "C" int rbd_aio_write2(rbd_image_t image, uint64_t off, size_t len, + const char *buf, rbd_completion_t c, int op_flags) +{ + librbd::ImageCtx *ictx = (librbd::ImageCtx *)image; + librbd::RBD::AioCompletion *comp = (librbd::RBD::AioCompletion *)c; + tracepoint(librbd, aio_write2_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), + ictx->read_only, off, len, buf, comp->pc, op_flags); + int r = librbd::aio_write(ictx, off, len, buf, + (librbd::AioCompletion *)comp->pc, op_flags); + tracepoint(librbd, aio_write_exit, r); + return r; +} + + extern "C" int rbd_aio_discard(rbd_image_t image, uint64_t off, uint64_t len, rbd_completion_t c) { @@ -1522,6 +1560,19 @@ extern "C" int rbd_aio_read(rbd_image_t image, uint64_t off, size_t len, return r; } +extern "C" int rbd_aio_read2(rbd_image_t image, uint64_t off, size_t len, + char *buf, rbd_completion_t c, int op_flags) +{ + librbd::ImageCtx *ictx = (librbd::ImageCtx *)image; + librbd::RBD::AioCompletion *comp = (librbd::RBD::AioCompletion *)c; + tracepoint(librbd, aio_read2_enter, ictx, ictx->name.c_str(), ictx->snap_name.c_str(), + ictx->read_only, off, len, buf, comp->pc, op_flags); + int r = librbd::aio_read(ictx, off, len, buf, NULL, + (librbd::AioCompletion *)comp->pc, op_flags); + tracepoint(librbd, aio_read_exit, r); + return r; +} + extern "C" int rbd_flush(rbd_image_t image) { librbd::ImageCtx *ictx = (librbd::ImageCtx *)image; diff --git a/src/tracing/librbd.tp b/src/tracing/librbd.tp index 10360d96fd68..5183710e870f 100644 --- a/src/tracing/librbd.tp +++ b/src/tracing/librbd.tp @@ -19,6 +19,25 @@ TRACEPOINT_EVENT(librbd, read_enter, ) ) +TRACEPOINT_EVENT(librbd, read2_enter, + TP_ARGS( + void*, imagectx, + const char*, name, + const char*, snap_name, + char, read_only, + uint64_t, offset, + uint64_t, length, + int, op_flags), + TP_FIELDS( + ctf_integer_hex(void*, imagectx, imagectx) + ctf_string(name, name) + ctf_string(snap_name, snap_name) + ctf_integer(char, read_only, read_only) + ctf_integer(uint64_t, offset, offset) + ctf_integer(uint64_t, length, length) + ctf_integer(int, op_flags, op_flags) + ) +) TRACEPOINT_EVENT(librbd, read_exit, TP_ARGS( ssize_t, retval), @@ -98,6 +117,28 @@ TRACEPOINT_EVENT(librbd, write_enter, ) ) +TRACEPOINT_EVENT(librbd, write2_enter, + TP_ARGS( + void*, imagectx, + const char*, name, + const char*, snap_name, + char, read_only, + uint64_t, off, + size_t, len, + const char*, buf, + int, op_flags), + TP_FIELDS( + ctf_integer_hex(void*, imagectx, imagectx) + ctf_string(name, name) + ctf_string(snap_name, snap_name) + ctf_integer(char, read_only, read_only) + ctf_integer(uint64_t, off, off) + ceph_ctf_sequence(unsigned char, buf, buf, size_t, len) + ctf_integer(int, op_flags, op_flags) + ) +) + + TRACEPOINT_EVENT(librbd, write_exit, TP_ARGS( ssize_t, retval), @@ -303,6 +344,29 @@ TRACEPOINT_EVENT(librbd, aio_write_enter, ) ) +TRACEPOINT_EVENT(librbd, aio_write2_enter, + TP_ARGS( + void*, imagectx, + const char*, name, + const char*, snap_name, + char, read_only, + uint64_t, off, + size_t, len, + const char*, buf, + const void*, completion, + int, op_flags), + TP_FIELDS( + ctf_integer_hex(void*, imagectx, imagectx) + ctf_string(name, name) + ctf_string(snap_name, snap_name) + ctf_integer(char, read_only, read_only) + ctf_integer(uint64_t, off, off) + ctf_integer(size_t, len, len) + ceph_ctf_sequence(unsigned char, buf, buf, size_t, len) + ctf_integer_hex(const void*, completion, completion) + ctf_integer(int, op_flags, op_flags) + ) +) TRACEPOINT_EVENT(librbd, aio_write_exit, TP_ARGS( int, retval), @@ -332,6 +396,30 @@ TRACEPOINT_EVENT(librbd, aio_read_enter, ) ) +TRACEPOINT_EVENT(librbd, aio_read2_enter, + TP_ARGS( + void*, imagectx, + const char*, name, + const char*, snap_name, + char, read_only, + uint64_t, offset, + uint64_t, length, + const char*, buf, + const void*, completion, + int, op_flags), + TP_FIELDS( + ctf_integer_hex(void*, imagectx, imagectx) + ctf_string(name, name) + ctf_string(snap_name, snap_name) + ctf_integer(char, read_only, read_only) + ctf_integer(uint64_t, offset, offset) + ctf_integer(uint64_t, length, length) + ctf_integer_hex(const void*, completion, completion) + ctf_integer(int, op_flags, op_flags) + ) +) + + TRACEPOINT_EVENT(librbd, aio_read_exit, TP_ARGS( int, retval),