On Sun, Nov 01, 2015 at 08:50:36PM +0300, Denis V. Lunev wrote: > On 10/30/2015 06:57 PM, Stefan Hajnoczi wrote: > >This one slipped through. Although we acquire AioContext when > >committing all devices we don't for just a single device. > > > >AioContext must be acquired before calling bdrv_*() functions to > >synchronize access with other threads that may be using the AioContext. > > > >Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com> > >--- > > blockdev.c | 12 +++++++++++- > > 1 file changed, 11 insertions(+), 1 deletion(-) > > > >diff --git a/blockdev.c b/blockdev.c > >index 18712d2..d611779 100644 > >--- a/blockdev.c > >+++ b/blockdev.c > >@@ -1120,6 +1120,9 @@ void hmp_commit(Monitor *mon, const QDict *qdict) > > if (!strcmp(device, "all")) { > > ret = bdrv_commit_all(); > > } else { > >+ BlockDriverState *bs; > >+ AioContext *aio_context; > >+ > > blk = blk_by_name(device); > > if (!blk) { > > monitor_printf(mon, "Device '%s' not found\n", device); > >@@ -1129,7 +1132,14 @@ void hmp_commit(Monitor *mon, const QDict *qdict) > > monitor_printf(mon, "Device '%s' has no medium\n", device); > > return; > > } > >- ret = bdrv_commit(blk_bs(blk)); > >+ > >+ bs = blk_bs(blk); > >+ aio_context = bdrv_get_aio_context(bs); > >+ aio_context_acquire(aio_context); > >+ > >+ ret = bdrv_commit(bs); > >+ > >+ aio_context_release(aio_context); > > } > > if (ret < 0) { > > monitor_printf(mon, "'commit' error for '%s': %s\n", device, > I like it in general, but could you pls wait a bit before pushing > it up. I am working at the moment on a more generic series. > I am going to attach this patch to it to consider the situation > as a whole. > > It would be much trickier than my previous one. There are > several other places discovered.
Sure. We need to solve the missing AioContext acquires by hard freeze (2015-11-12, see http://qemu-project.org/Planning/2.5). Until then we can discuss different solutions. Stefan
signature.asc
Description: PGP signature