From 1ab727d194f63fdc14b1598e14932f9558997e1d Mon Sep 17 00:00:00 2001 From: Haomai Wang Date: Tue, 4 Aug 2015 17:31:43 +0800 Subject: [PATCH] librbd: Add interface to let user can get private data from comp Signed-off-by: Haomai Wang --- src/include/rbd/librbd.h | 1 + src/include/rbd/librbd.hpp | 1 + src/librbd/AioCompletion.h | 4 ++++ src/librbd/librbd.cc | 12 ++++++++++++ 4 files changed, 18 insertions(+) diff --git a/src/include/rbd/librbd.h b/src/include/rbd/librbd.h index 2f665916566ce..41d671e4bca58 100644 --- a/src/include/rbd/librbd.h +++ b/src/include/rbd/librbd.h @@ -479,6 +479,7 @@ CEPH_RBD_API int rbd_aio_create_completion(void *cb_arg, CEPH_RBD_API int rbd_aio_is_complete(rbd_completion_t c); CEPH_RBD_API int rbd_aio_wait_for_complete(rbd_completion_t c); CEPH_RBD_API ssize_t rbd_aio_get_return_value(rbd_completion_t c); +CEPH_RBD_API void *rbd_aio_get_arg(rbd_completion_t c); CEPH_RBD_API void rbd_aio_release(rbd_completion_t c); CEPH_RBD_API int rbd_flush(rbd_image_t image); /** diff --git a/src/include/rbd/librbd.hpp b/src/include/rbd/librbd.hpp index 49a6f783bf00e..70fcf13e07604 100644 --- a/src/include/rbd/librbd.hpp +++ b/src/include/rbd/librbd.hpp @@ -70,6 +70,7 @@ public: bool is_complete(); int wait_for_complete(); ssize_t get_return_value(); + void *get_arg(); void release(); }; diff --git a/src/librbd/AioCompletion.h b/src/librbd/AioCompletion.h index 1ef37a1309846..44c93b284c58a 100644 --- a/src/librbd/AioCompletion.h +++ b/src/librbd/AioCompletion.h @@ -157,6 +157,10 @@ namespace librbd { Mutex::Locker l(lock); event_notify = true; } + + void *get_arg() { + return complete_arg; + } }; class C_AioRequest : public Context { diff --git a/src/librbd/librbd.cc b/src/librbd/librbd.cc index 20209ede5a387..88380960f4efe 100644 --- a/src/librbd/librbd.cc +++ b/src/librbd/librbd.cc @@ -304,6 +304,12 @@ namespace librbd { return c->get_return_value(); } + void *RBD::AioCompletion::get_arg() + { + librbd::AioCompletion *c = (librbd::AioCompletion *)pc; + return c->get_arg(); + } + void RBD::AioCompletion::release() { librbd::AioCompletion *c = (librbd::AioCompletion *)pc; @@ -2252,6 +2258,12 @@ extern "C" ssize_t rbd_aio_get_return_value(rbd_completion_t c) return comp->get_return_value(); } +extern "C" void *rbd_aio_get_arg(rbd_completion_t c) +{ + librbd::RBD::AioCompletion *comp = (librbd::RBD::AioCompletion *)c; + return comp->get_arg(); +} + extern "C" void rbd_aio_release(rbd_completion_t c) { librbd::RBD::AioCompletion *comp = (librbd::RBD::AioCompletion *)c; -- 2.39.5