[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 1/3] dataplane: add bdrv_acct_*() accounting
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [PATCH 1/3] dataplane: add bdrv_acct_*() accounting |
Date: |
Tue, 10 Jun 2014 09:29:50 +0200 |
bdrv_acct_start() and bdrv_acct_done() must be called in order to update
block device accounting information.
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
hw/block/dataplane/virtio-blk.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/hw/block/dataplane/virtio-blk.c b/hw/block/dataplane/virtio-blk.c
index 8ac6049..c5c25cb 100644
--- a/hw/block/dataplane/virtio-blk.c
+++ b/hw/block/dataplane/virtio-blk.c
@@ -32,6 +32,7 @@ typedef struct {
struct iovec bounce_iov; /* used if guest buffers are unaligned */
QEMUIOVector bounce_qiov; /* bounce buffer iovecs */
bool read; /* read or write? */
+ BlockAcctCookie acct; /* block device accounting */
} VirtIOBlockRequest;
struct VirtIOBlockDataPlane {
@@ -103,6 +104,9 @@ static void complete_rdwr(void *opaque, int ret)
*/
vring_push(&req->s->vring, req->elem, len + sizeof(hdr));
notify_guest(req->s);
+ if (likely(ret == 0)) {
+ bdrv_acct_done(req->s->blk->conf.bs, &req->acct);
+ }
g_slice_free(VirtIOBlockRequest, req);
}
@@ -170,9 +174,13 @@ static void do_rdwr_cmd(VirtIOBlockDataPlane *s, bool read,
nb_sectors = qiov->size / BDRV_SECTOR_SIZE;
if (read) {
+ bdrv_acct_start(s->blk->conf.bs, &req->acct,
+ qiov->size, BDRV_ACCT_READ);
bdrv_aio_readv(s->blk->conf.bs, sector_num, qiov, nb_sectors,
complete_rdwr, req);
} else {
+ bdrv_acct_start(s->blk->conf.bs, &req->acct,
+ qiov->size, BDRV_ACCT_WRITE);
bdrv_aio_writev(s->blk->conf.bs, sector_num, qiov, nb_sectors,
complete_rdwr, req);
}
@@ -185,6 +193,7 @@ static void complete_flush(void *opaque, int ret)
if (ret == 0) {
status = VIRTIO_BLK_S_OK;
+ bdrv_acct_done(req->s->blk->conf.bs, &req->acct);
} else {
status = VIRTIO_BLK_S_IOERR;
}
@@ -201,6 +210,7 @@ static void do_flush_cmd(VirtIOBlockDataPlane *s,
VirtQueueElement *elem,
req->elem = elem;
req->inhdr = inhdr;
+ bdrv_acct_start(s->blk->conf.bs, &req->acct, 0, BDRV_ACCT_FLUSH);
bdrv_aio_flush(s->blk->conf.bs, complete_flush, req);
}
--
1.9.3