int rbd_aio_read(rbd_image_t image, uint64_t off, size_t len, char *buf, rbd_completion_t c);
int rbd_aio_discard(rbd_image_t image, uint64_t off, uint64_t len, rbd_completion_t c);
int rbd_aio_create_completion(void *cb_arg, rbd_callback_t complete_cb, rbd_completion_t *c);
+int rbd_aio_is_complete(rbd_completion_t c);
int rbd_aio_wait_for_complete(rbd_completion_t c);
ssize_t rbd_aio_get_return_value(rbd_completion_t c);
void rbd_aio_release(rbd_completion_t c);
struct AioCompletion {
void *pc;
AioCompletion(void *cb_arg, callback_t complete_cb);
+ bool is_complete();
int wait_for_complete();
ssize_t get_return_value();
void release();
void complete_request(CephContext *cct, ssize_t r);
+ bool is_complete() {
+ Mutex::Locker l(lock);
+ return done;
+ }
+
ssize_t get_return_value() {
lock.Lock();
ssize_t r = rval;
c->rbd_comp = this;
}
+ bool RBD::AioCompletion::is_complete()
+ {
+ librbd::AioCompletion *c = (librbd::AioCompletion *)pc;
+ return c->is_complete();
+ }
+
int RBD::AioCompletion::wait_for_complete()
{
librbd::AioCompletion *c = (librbd::AioCompletion *)pc;
return librbd::flush(ictx);
}
+extern "C" int rbd_aio_is_complete(rbd_completion_t c)
+{
+ librbd::RBD::AioCompletion *comp = (librbd::RBD::AioCompletion *)c;
+ return comp->is_complete();
+}
+
extern "C" int rbd_aio_wait_for_complete(rbd_completion_t c)
{
librbd::RBD::AioCompletion *comp = (librbd::RBD::AioCompletion *)c;