From 654a1f8a9d19746aae381e1305635bdd80d8f79e Mon Sep 17 00:00:00 2001 From: Josh Durgin Date: Fri, 4 Feb 2011 14:04:35 -0800 Subject: [PATCH] librbd: finish C I/O api --- src/include/rbd/librbd.h | 3 ++- src/librbd.cc | 11 ++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/include/rbd/librbd.h b/src/include/rbd/librbd.h index f83b2ed40f35f..d786471cca768 100644 --- a/src/include/rbd/librbd.h +++ b/src/include/rbd/librbd.h @@ -90,8 +90,9 @@ int rbd_read(rbd_image_t image, off_t ofs, size_t len, char *buf); int rbd_read_iterate(rbd_image_t image, off_t ofs, size_t len, int (*cb)(off_t, size_t, const char *, void *), void *arg); int rbd_write(rbd_image_t image, off_t ofs, size_t len, const char *buf); -int rbd_aio_create_completion(void *cb_arg, rbd_callback_t complete_cb, rbd_completion_t *c); int rbd_aio_write(rbd_image_t image, off_t off, size_t len, const char *buf, rbd_completion_t c); +int rbd_aio_read(rbd_image_t image, off_t off, size_t len, char *buf, rbd_completion_t c); +int rbd_aio_create_completion(void *cb_arg, rbd_callback_t complete_cb, rbd_completion_t *c); int rbd_aio_wait_for_complete(rbd_completion_t c); int rbd_aio_get_return_value(rbd_completion_t c); void rbd_aio_release(rbd_completion_t c); diff --git a/src/librbd.cc b/src/librbd.cc index 24a723a4277ed..17c5009630783 100644 --- a/src/librbd.cc +++ b/src/librbd.cc @@ -1709,7 +1709,8 @@ extern "C" int rbd_write(rbd_image_t image, off_t ofs, size_t len, const char *b extern "C" int rbd_aio_create_completion(void *cb_arg, rbd_callback_t complete_cb, rbd_completion_t *c) { librbd::RBDClient::AioCompletion *comp = rbd_client->aio_create_completion(cb_arg, complete_cb); - *c = (rbd_completion_t) comp; + librbd::RBD::AioCompletion *rbd_comp = new librbd::RBD::AioCompletion(comp); + *c = (rbd_completion_t) rbd_comp; return 0; } @@ -1720,6 +1721,14 @@ extern "C" int rbd_aio_write(rbd_image_t image, off_t off, size_t len, const cha return rbd_client->aio_write(ictx->pctx, ictx, off, len, buf, (librbd::RBDClient::AioCompletion *)comp->pc); } +extern "C" int rbd_aio_read(rbd_image_t image, off_t off, size_t len, char *buf, rbd_completion_t c) +{ + librbd::ImageCtx *ictx = (librbd::ImageCtx *)image; + librbd::RBD::AioCompletion *comp = (librbd::RBD::AioCompletion *)c; + dout(10) << "librbd::RBD::aio_read() buf=" << (void *)buf << "~" << (void *)buf + len - 1 << dendl; + return rbd_client->aio_read(ictx->pctx, ictx, off, len, buf, (librbd::RBDClient::AioCompletion *)comp->pc); +} + extern "C" int rbd_aio_wait_for_complete(rbd_completion_t c) { librbd::RBD::AioCompletion *comp = (librbd::RBD::AioCompletion *)c; -- 2.39.5