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->status = ioreq->aio_errors ? BLKIF_RSP_ERROR : BLKIF_RSP_OKAY;
|
||||||
ioreq_unmap(ioreq);
|
ioreq_unmap(ioreq);
|
||||||
ioreq_finish(ioreq);
|
ioreq_finish(ioreq);
|
||||||
|
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);
|
bdrv_acct_done(ioreq->blkdev->bs, &ioreq->acct);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
qemu_bh_schedule(ioreq->blkdev->bh);
|
qemu_bh_schedule(ioreq->blkdev->bh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue