mirror of https://gitee.com/openkylin/qemu.git
xen_disk: fix io accounting
bdrv_acct_done was called unconditional. But in case the ioreq has no segments there is no matching bdrv_acct_start call. This could lead to bogus accounting values. Found by code inspection. Signed-off-by: Olaf Hering <olaf@aepfle.de> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
This commit is contained in:
parent
15e8159e76
commit
58da5b1e01
|
@ -483,7 +483,18 @@ static void qemu_aio_complete(void *opaque, int ret)
|
|||
ioreq->status = ioreq->aio_errors ? BLKIF_RSP_ERROR : BLKIF_RSP_OKAY;
|
||||
ioreq_unmap(ioreq);
|
||||
ioreq_finish(ioreq);
|
||||
bdrv_acct_done(ioreq->blkdev->bs, &ioreq->acct);
|
||||
switch (ioreq->req.operation) {
|
||||
case BLKIF_OP_WRITE:
|
||||
case BLKIF_OP_FLUSH_DISKCACHE:
|
||||
if (!ioreq->req.nr_segments) {
|
||||
break;
|
||||
}
|
||||
case BLKIF_OP_READ:
|
||||
bdrv_acct_done(ioreq->blkdev->bs, &ioreq->acct);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
qemu_bh_schedule(ioreq->blkdev->bh);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue