]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librados: unconditonally associate IoCtxImpl with AioCompletionImpl
authorSage Weil <sage.weil@dreamhost.com>
Thu, 5 Apr 2012 04:49:40 +0000 (21:49 -0700)
committerSage Weil <sage.weil@dreamhost.com>
Sat, 14 Apr 2012 03:46:34 +0000 (20:46 -0700)
We were only setting the pointer if we were on the aio_write_list.  Set
this pointer for any aio.

Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
src/librados/IoCtxImpl.cc

index db98a2c51327e9759314fe36fc37e3854c48c4dd..66ae5644f61547d45de6b0c3d8748762c8ec4d83 100644 (file)
@@ -64,8 +64,7 @@ void librados::IoCtxImpl::queue_aio_write(AioCompletionImpl *c)
 {
   get();
   aio_write_list_lock.Lock();
-  assert(!c->io);
-  c->io = this;
+  assert(c->io == this);
   c->aio_write_seq = ++aio_write_seq;
   aio_write_list.push_back(&c->aio_write_list_item);
   aio_write_list_lock.Unlock();
@@ -75,7 +74,6 @@ void librados::IoCtxImpl::complete_aio_write(AioCompletionImpl *c)
 {
   aio_write_list_lock.Lock();
   assert(c->io == this);
-  c->io = NULL;
   c->aio_write_list_item.remove_myself();
   aio_write_cond.Signal();
   aio_write_list_lock.Unlock();
@@ -648,6 +646,7 @@ int librados::IoCtxImpl::aio_operate_read(const object_t &oid,
 {
   Context *onack = new C_aio_Ack(c);
 
+  c->io = this;
   c->pbl = pbl;
 
   Mutex::Locker l(*lock);
@@ -668,6 +667,7 @@ int librados::IoCtxImpl::aio_operate(const object_t& oid,
   Context *onack = new C_aio_Ack(c);
   Context *oncommit = new C_aio_Safe(c);
 
+  c->io = this;
   queue_aio_write(c);
 
   Mutex::Locker l(*lock);
@@ -683,6 +683,7 @@ int librados::IoCtxImpl::aio_read(const object_t oid, AioCompletionImpl *c,
   Context *onack = new C_aio_Ack(c);
   eversion_t ver;
 
+  c->io = this;
   c->pbl = pbl;
 
   Mutex::Locker l(*lock);
@@ -697,6 +698,7 @@ int librados::IoCtxImpl::aio_read(const object_t oid, AioCompletionImpl *c,
 {
   Context *onack = new C_aio_Ack(c);
 
+  c->io = this;
   c->buf = buf;
   c->maxlen = len;
 
@@ -720,6 +722,7 @@ int librados::IoCtxImpl::aio_sparse_read(const object_t oid,
   onack->data_bl = data_bl;
   eversion_t ver;
 
+  c->io = this;
   c->pbl = NULL;
 
   Mutex::Locker l(*lock);
@@ -739,6 +742,7 @@ int librados::IoCtxImpl::aio_write(const object_t &oid, AioCompletionImpl *c,
   if (snap_seq != CEPH_NOSNAP)
     return -EROFS;
 
+  c->io = this;
   queue_aio_write(c);
 
   Context *onack = new C_aio_Ack(c);
@@ -761,6 +765,7 @@ int librados::IoCtxImpl::aio_append(const object_t &oid, AioCompletionImpl *c,
   if (snap_seq != CEPH_NOSNAP)
     return -EROFS;
 
+  c->io = this;
   queue_aio_write(c);
 
   Context *onack = new C_aio_Ack(c);
@@ -784,6 +789,7 @@ int librados::IoCtxImpl::aio_write_full(const object_t &oid,
   if (snap_seq != CEPH_NOSNAP)
     return -EROFS;
 
+  c->io = this;
   queue_aio_write(c);
 
   Context *onack = new C_aio_Ack(c);
@@ -1003,6 +1009,8 @@ int librados::IoCtxImpl::aio_exec(const object_t& oid, AioCompletionImpl *c,
 {
   Context *onack = new C_aio_Ack(c);
 
+  c->io = this;
+
   Mutex::Locker l(*lock);
   ::ObjectOperation rd;
   prepare_assert_ops(&rd);