]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: add an is_complete() method to AioCompletions
authorJosh Durgin <josh.durgin@inktank.com>
Wed, 27 Mar 2013 22:37:27 +0000 (15:37 -0700)
committerJosh Durgin <josh.durgin@inktank.com>
Thu, 28 Mar 2013 17:46:59 +0000 (10:46 -0700)
Mainly this is useful for testing, like flushing and checking that
all pending writes are complete after the flush finishes.

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
src/include/rbd/librbd.h
src/include/rbd/librbd.hpp
src/librbd/AioCompletion.h
src/librbd/librbd.cc

index 8ce82e10c6d0289c8be7fbb67dc82ba8e14ed41d..f41641bec7ef4f746a9fd7374b4bddd750ce619f 100644 (file)
@@ -318,6 +318,7 @@ int rbd_aio_write(rbd_image_t image, uint64_t off, size_t len, const char *buf,
 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);
index 9fdd14557a0a0d421f4bdd9f894867fa905f6b38..c256df267f9a9c24035889d7384cbefb4f935ecc 100644 (file)
@@ -63,6 +63,7 @@ public:
   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();
index 361d425531f24015a5aea06a89c8189feaa99f2a..8420d37c8bd6f4cfcd5147126110e3d0d4ffc737 100644 (file)
@@ -125,6 +125,11 @@ namespace librbd {
 
     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;
index 9621f352abbe633ffe1d64263ccde484dd59567b..a155abb03764da779f241b7f4a3a28b99094cd2c 100644 (file)
@@ -181,6 +181,12 @@ namespace librbd {
     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;
@@ -1060,6 +1066,12 @@ extern "C" int rbd_flush(rbd_image_t image)
   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;