This patch uses the new librados aio callback function (from the unstable
branch of ceph).
Christian
---
block/rbd.c | 51 ++++++++++++++++++++++++---------------------------
1 files changed, 24 insertions(+), 27 deletions(-)
diff --git a/block/rbd.c b/block/rbd.c
index 12a85dc..dfd2eca 100644
--- a/block/rbd.c
+++ b/block/rbd.c
@@ -393,34 +393,31 @@ static void rbd_finish_aiocb(rados_completion_t c,
RADOSCB * rcb)
int64_t r;
int i;
- if (rados_aio_is_complete(c)) {
- acb->aiocnt--;
- r = rados_aio_get_return_value(c);
- rados_aio_set_callback(c, NULL, NULL);
- rados_aio_release(c);
- if (acb->write) {
- acb->ret += r;
+ acb->aiocnt--;
+ r = rados_aio_get_return_value(c);
+ rados_aio_release(c);
+ if (acb->write) {
+ acb->ret += r;
+ } else {
+ if (r < 0) {
+ memset(rcb->buf, 0, rcb->segsize);
+ acb->ret += rcb->segsize;
+ } else if (r < rcb->segsize) {
+ memset(rcb->buf + r, 0, rcb->segsize - r);
+ acb->ret += rcb->segsize;
} else {
- if (r < 0) {
- memset(rcb->buf, 0, rcb->segsize);
- acb->ret += rcb->segsize;
- } else if (r < rcb->segsize) {
- memset(rcb->buf + r, 0, rcb->segsize - r);
- acb->ret += rcb->segsize;
- } else {
- acb->ret += r;
- }
- }
- qemu_free(rcb);
- i = 0;
- while ((acb->aiocnt == 0) && !acb->rccomplete && i < 5) {
- usleep(100);
- i++;
- }
- if ((acb->aiocnt == 0) && acb->rccomplete && acb->bh) {
- qemu_bh_schedule(acb->bh);
+ acb->ret += r;
}
}
+ qemu_free(rcb);
+ i = 0;
+ while ((acb->aiocnt == 0) && !acb->rccomplete && i < 5) {
+ usleep(100);
+ i++;
+ }
+ if ((acb->aiocnt == 0) && acb->rccomplete && acb->bh) {
+ qemu_bh_schedule(acb->bh);
+ }
}
static void rbd_aio_bh_cb(void *opaque)
@@ -494,8 +491,8 @@ static BlockDriverAIOCB *rbd_aio_rw_vector(BlockDriverState
* bs,
acb->aiocnt++;
- rados_aio_create_completion((rados_callback_t) rbd_finish_aiocb,
- rcb, &c);
+ rados_aio_create_completion(rcb, (rados_callback_t) rbd_finish_aiocb,
+ NULL, &c);
if (write) {
rados_aio_write(s->pool, n, segoffs, buf, segsize, c);
} else {
--
1.6.6.1
--
Christian Brunner MUC.DE e.V.
Joseph-Dollinger-Bogen 14
D-80807 Muenchen
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html