sheepdog: handle vdi objects in resend_aio_req
The current resend_aio_req() doesn't work when the request is against vdi objects. This fixes the problem. Signed-off-by: MORITA Kazutaka <morita.kazutaka@lab.ntt.co.jp> Tested-by: Liu Yuan <namei.unix@gmail.com> Reviewed-by: Liu Yuan <namei.unix@gmail.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
80731d9da5
commit
2412aec745
@ -1197,11 +1197,15 @@ static int coroutine_fn resend_aioreq(BDRVSheepdogState *s, AIOReq *aio_req)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
aio_req->oid = vid_to_data_oid(s->inode.vdi_id,
|
if (is_data_obj(aio_req->oid)) {
|
||||||
data_oid_to_idx(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 */
|
/* 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);
|
int idx = data_oid_to_idx(aio_req->oid);
|
||||||
AIOReq *areq;
|
AIOReq *areq;
|
||||||
|
|
||||||
@ -1229,8 +1233,15 @@ static int coroutine_fn resend_aioreq(BDRVSheepdogState *s, AIOReq *aio_req)
|
|||||||
create = true;
|
create = true;
|
||||||
}
|
}
|
||||||
out:
|
out:
|
||||||
return add_aio_request(s, aio_req, acb->qiov->iov, acb->qiov->niov,
|
if (is_data_obj(aio_req->oid)) {
|
||||||
create, acb->aiocb_type);
|
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 */
|
/* TODO Convert to fine grained options */
|
||||||
|
Loading…
Reference in New Issue
Block a user