[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 4/9] sheepdog: handle vdi objects in resend_aio_r
From: |
MORITA Kazutaka |
Subject: |
[Qemu-devel] [PATCH v2 4/9] sheepdog: handle vdi objects in resend_aio_req |
Date: |
Wed, 24 Jul 2013 16:56:28 +0900 |
The current resend_aio_req() doesn't work when the request is against
vdi objects. This fixes the problem.
Signed-off-by: MORITA Kazutaka <address@hidden>
---
block/sheepdog.c | 21 ++++++++++++++++-----
1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/block/sheepdog.c b/block/sheepdog.c
index bca5730..f25c7df 100644
--- a/block/sheepdog.c
+++ b/block/sheepdog.c
@@ -1209,11 +1209,15 @@ static int coroutine_fn resend_aioreq(BDRVSheepdogState
*s, AIOReq *aio_req)
return ret;
}
- aio_req->oid = vid_to_data_oid(s->inode.vdi_id,
- data_oid_to_idx(aio_req->oid));
+ if (is_data_obj(aio_req->oid)) {
+ aio_req->oid = vid_to_data_oid(s->inode.vdi_id,
+ data_oid_to_idx(aio_req->oid));
+ } else {
+ aio_req->oid = vid_to_vdi_oid(s->inode.vdi_id);
+ }
/* check whether this request becomes a CoW one */
- if (acb->aiocb_type == AIOCB_WRITE_UDATA) {
+ if (acb->aiocb_type == AIOCB_WRITE_UDATA && is_data_obj(aio_req->oid)) {
int idx = data_oid_to_idx(aio_req->oid);
AIOReq *areq;
@@ -1241,8 +1245,15 @@ static int coroutine_fn resend_aioreq(BDRVSheepdogState
*s, AIOReq *aio_req)
create = true;
}
out:
- return add_aio_request(s, aio_req, acb->qiov->iov, acb->qiov->niov,
- create, acb->aiocb_type);
+ if (is_data_obj(aio_req->oid)) {
+ return add_aio_request(s, aio_req, acb->qiov->iov, acb->qiov->niov,
+ create, acb->aiocb_type);
+ } else {
+ struct iovec iov;
+ iov.iov_base = &s->inode;
+ iov.iov_len = sizeof(s->inode);
+ return add_aio_request(s, aio_req, &iov, 1, false, AIOCB_WRITE_UDATA);
+ }
}
/* TODO Convert to fine grained options */
--
1.8.1.3.566.gaa39828
- [Qemu-devel] [PATCH v2 0/9] sheepdog: reconnect server after connection failure, MORITA Kazutaka, 2013/07/24
- [Qemu-devel] [PATCH v2 4/9] sheepdog: handle vdi objects in resend_aio_req,
MORITA Kazutaka <=
- [Qemu-devel] [PATCH v2 2/9] iov: handle EOF in iov_send_recv, MORITA Kazutaka, 2013/07/24
- [Qemu-devel] [PATCH v2 1/9] ignore SIGPIPE in qemu-img and qemu-io, MORITA Kazutaka, 2013/07/24
- [Qemu-devel] [PATCH v2 3/9] sheepdog: check return values of qemu_co_recv/send correctly, MORITA Kazutaka, 2013/07/24
- [Qemu-devel] [PATCH v2 7/9] sheepdog: try to reconnect to sheepdog after network error, MORITA Kazutaka, 2013/07/24
- [Qemu-devel] [PATCH v2 5/9] sheepdog: reload inode outside of resend_aioreq, MORITA Kazutaka, 2013/07/24
- [Qemu-devel] [PATCH v2 6/9] coroutine: add co_aio_sleep_ns() to allow sleep in block drivers, MORITA Kazutaka, 2013/07/24
- [Qemu-devel] [PATCH v2 8/9] sheepdog: make add_aio_request and send_aioreq void functions, MORITA Kazutaka, 2013/07/24
- [Qemu-devel] [PATCH v2 9/9] sheepdog: cancel aio requests if possible, MORITA Kazutaka, 2013/07/24
- Re: [Qemu-devel] [sheepdog] [PATCH v2 0/9] sheepdog: reconnect server after connection failure, Liu Yuan, 2013/07/24