[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2] xen_disk: fix io accounting
From: |
Olaf Hering |
Subject: |
[Qemu-devel] [PATCH v2] xen_disk: fix io accounting |
Date: |
Fri, 7 Feb 2014 15:47:54 +0100 |
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 <address@hidden>
---
v2:
add comment /* fall through */
hw/block/xen_disk.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/hw/block/xen_disk.c b/hw/block/xen_disk.c
index 098f6c6..fb4ca4a 100644
--- a/hw/block/xen_disk.c
+++ b/hw/block/xen_disk.c
@@ -483,7 +483,19 @@ 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;
+ }
+ /* fall through */
+ case BLKIF_OP_READ:
+ bdrv_acct_done(ioreq->blkdev->bs, &ioreq->acct);
+ break;
+ default:
+ break;
+ }
qemu_bh_schedule(ioreq->blkdev->bh);
}
- [Qemu-devel] [PATCH v2] xen_disk: fix io accounting,
Olaf Hering <=