[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 0/3] better I/O accounting V2
From: |
Ryan Harper |
Subject: |
Re: [Qemu-devel] [PATCH 0/3] better I/O accounting V2 |
Date: |
Mon, 22 Aug 2011 11:46:00 -0500 |
User-agent: |
Mutt/1.5.6+20040907i |
* Christoph Hellwig <address@hidden> [2011-08-22 10:37]:
> On Mon, Aug 22, 2011 at 10:29:11AM -0500, Ryan Harper wrote:
> > (gdb) frame 0
> > #0 0x00000000004200c1 in bdrv_acct_done (bs=0x12310b0, cookie=0x1c68810)
> > at /root/git/qemu/block_int.h:239 239 bs->nr_bytes[cookie->type] +=
> > cookie->bytes;
> > (gdb) p *cookie
> > $3 = {bytes = 72057589759737855, start_time_ns = 72057589759737855, type =
> > 16777215}
>
> So it is indeed corrupted. I'll try to figure out how that could have
> happened.
So, I believe this is how it's happening.
we start accounting on a write which is turned into a multiwrite via
virtio_blk_handle_write() which calls virtio_submit_multiwrite().
Then when the multiwrite completes, we invoke virtio_blk_rw_complete()
on each part of the multiwrite. None of these requests have had their
acct structure initialized since there was just *one* initial write.
We could do a bdrv_acct_start() on each req, but that would break the
concept of hiding the additional writes under the initial request.
So ensuring that the acct field is initialed when the request is
allocated will fix the issue.
With this patch, I don't see the crash anymore.
Signed-off-by: Ryan Harper <address@hidden>
diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
index 2660d1d..e746917 100644
--- a/hw/virtio-blk.c
+++ b/hw/virtio-blk.c
@@ -123,6 +123,7 @@ static VirtIOBlockReq *virtio_blk_alloc_request(VirtIOBlock
*s)
req->dev = s;
req->qiov.size = 0;
req->next = NULL;
+ memset(&req->acct, 0, sizeof(BlockAcctCookie));
return req;
}
--
Ryan Harper
Software Engineer; Linux Technology Center
IBM Corp., Austin, Tx
address@hidden
- [Qemu-devel] [PATCH 1/3] block: include flush requests in info blockstats, (continued)
- [Qemu-devel] [PATCH 1/3] block: include flush requests in info blockstats, Christoph Hellwig, 2011/08/21
- [Qemu-devel] [PATCH 2/3] block: explicit I/O accounting, Christoph Hellwig, 2011/08/21
- [Qemu-devel] [PATCH 3/3] block: latency accounting, Christoph Hellwig, 2011/08/21
- Re: [Qemu-devel] [PATCH 0/3] better I/O accounting V2, Stefan Hajnoczi, 2011/08/22
- Re: [Qemu-devel] [PATCH 0/3] better I/O accounting V2, Ryan Harper, 2011/08/22
Re: [Qemu-devel] [PATCH 0/3] better I/O accounting V2, Kevin Wolf, 2011/08/22
Re: [Qemu-devel] [PATCH 0/3] better I/O accounting V3, Christoph Hellwig, 2011/08/25
Re: [Qemu-devel] [PATCH 0/3] better I/O accounting V3, Kevin Wolf, 2011/08/25